Educational Codeforces Round 81 (Rated for Div. 2)

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 }
View Code

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 }
View Code

昨天比的时候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 }
View Code

D

忘记要容斥,最后发现答案输出有负数存在,所以待补

 https://www.cnblogs.com/luoyugongxi/p/12243962.html

upd:没想倒是原题……这次没想到被hack完还能上几分,这B题真搞。

有空,有能力补EF

https://codeforces.com/contest/1295

原文地址:https://www.cnblogs.com/luoyugongxi/p/12242239.html