A
0~9需要多少笔画,自取7和1,判奇偶
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define il inline 5 #define it register int 6 #define lowbit(x) (x)&(-x) 7 #define mem(a,b) memset(a,b,sizeof(a)) 8 #define mod 1000000007 9 const int maxn=1e5+10; 10 int n,m; 11 int t; 12 int main(){ 13 scanf("%d",&t); 14 while(t--){ 15 scanf("%d",&n); 16 if(n&1){ 17 n-=3; 18 printf("7"); 19 int ci=n/2; 20 for(it i=0;i<ci;i++){ 21 printf("1"); 22 } 23 printf(" "); 24 } 25 else{ 26 int ci=n/2; 27 for(it i=0;i<ci;i++){ 28 printf("1"); 29 } 30 printf(" "); 31 } 32 } 33 return 0; 34 }
B
被hack了,早上仔细一想,发现判m==0的时候少考虑了几个条件,直接a[i]==m就过了,所以就必被hack了
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define il inline 5 #define it register int 6 #define lowbit(x) (x)&(-x) 7 #define mem(a,b) memset(a,b,sizeof(a)) 8 #define mod 1000000007 9 const int maxn=1e5+10; 10 int n,m; 11 int t,a[maxn]; 12 char s[maxn]; 13 int main(){ 14 scanf("%d",&t); 15 while(t--){ 16 scanf("%d%d",&n,&m); 17 scanf("%s",s); 18 int l=strlen(s); 19 a[0]=0; 20 int ji=0; 21 for(it i=0;i<l;i++){ 22 if(s[i]=='0'){ 23 a[i+1]=a[i]+1; 24 } 25 else{ 26 a[i+1]=a[i]-1; 27 } 28 if(a[i+1]&1){ 29 ji++; 30 } 31 } 32 if(a[l]<0 && m>0){ 33 int sum=0; 34 for(it i=1;i<=l;i++){ 35 if((m-a[i])%a[l]==0 && m<=a[i]){ 36 sum++; 37 } 38 } 39 printf("%d ",sum); 40 } 41 else if(a[l]>0 && m<0){ 42 int sum=0; 43 for(it i=1;i<=l;i++){ 44 if((m-a[i])%a[l]==0 && m>=a[i]){ 45 sum++; 46 } 47 } 48 printf("%d ",sum); 49 } 50 else if(a[l]==0){ 51 int sum=0; 52 for(it i=1;i<=l;i++){ 53 if(a[i]==m){ 54 sum++; 55 } 56 } 57 if(!sum){ 58 printf("%d ",sum); 59 } 60 else{ 61 printf("-1 "); 62 } 63 } 64 else if(m==0){ 65 int sum=1; 66 for(it i=1;i<=l;i++){ 67 if(a[i]==0 || (a[l]<0 && 0<a[i] || a[l]>0 && 0>a[i])&& a[i]%a[l]==0){ 68 sum++; 69 } 70 } 71 printf("%d ",sum); 72 } 73 74 else{ 75 int sum=0; 76 for(it i=1;i<=l;i++){ 77 if((m-a[i])%a[l]==0 && m>0 &&m>=a[i]){ 78 sum++; 79 } 80 if((m-a[i])%a[l]==0 && m<0 &&m<=a[i]){ 81 sum++; 82 } 83 } 84 printf("%d ",sum); 85 } 86 } 87 return 0; 88 }
昨天比的时候B题感觉不太好,但过了就没细想,果然出现问题了
C
就是找字母位置,是否比他大,或者有无
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define il inline 5 #define it register int 6 #define lowbit(x) (x)&(-x) 7 #define mem(a,b) memset(a,b,sizeof(a)) 8 #define mod 1000000007 9 const int maxn=1e5+10; 10 int n,m; 11 int t; 12 char s[maxn],ss[maxn]; 13 int a[27][maxn]; 14 int main(){ 15 scanf("%d",&t); 16 while(t--){ 17 scanf("%s",s);scanf("%s",ss); 18 int l=strlen(s),l1=strlen(ss); 19 for(it i=0;i<26;i++){ 20 a[i][0]=0; 21 } 22 for(it i=0;i<l;i++){ 23 int c=s[i]-'a'; 24 a[c][++a[c][0]]=i; 25 } 26 int pos=-1,f=1,bu=1; 27 for(it i=0;i<l1;i++){ 28 int c=ss[i]-'a'; 29 if(a[c][0]==0){f=0;break;} 30 int pps=upper_bound(a[c]+1,a[c]+1+a[c][0],pos)-a[c];//cout<<pps<<endl; 31 if(a[c][pps]>pos && a[c][0]>=pps){ 32 pos=a[c][pps]; 33 } 34 else{ 35 bu++;pos=a[c][1]; 36 } 37 //cout<<a[c][pps]<<" "<<pos<<endl; 38 } 39 if(f){ 40 printf("%d ",bu); 41 } 42 else{ 43 printf("-1 "); 44 } 45 } 46 return 0; 47 }
D
忘记要容斥,最后发现答案输出有负数存在,所以待补
https://www.cnblogs.com/luoyugongxi/p/12243962.html
upd:没想倒是原题……这次没想到被hack完还能上几分,这B题真搞。
有空,有能力补EF