Codeforces Round #211 (Div. 2)

难得一次比赛能够自己成功A掉四个题;

A题:水题,模拟一下就行;

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 
 5 void print(int x)
 6 {
 7     if(x>=5){printf("-O|");x%=5;}
 8     else printf("O-|");
 9     if(x==0)puts("-OOOO");
10     else if(x==1)puts("O-OOO");
11     else if(x==2)puts("OO-OO");
12     else if(x==3)puts("OOO-O");
13     else if(x==4)puts("OOOO-");
14 }
15 
16 int n;
17 int main()
18 {
19     scanf("%d",&n);
20     while(n/10>0)
21     {
22         int x=n%10;
23         print(x);
24         n/=10;
25     }
26     print(n);
27     return 0;
28 }
View Code

B:水题,边输入边统计就行:

 1 By yours1103, contest: Codeforces Round #211 (Div. 2), problem: (B) Fence, Accepted, #
 2  #include <iostream>
 3 #include <cstdio>
 4 #define maxn 150005
 5 using namespace std;
 6 
 7 int n,k,ans,num[maxn],tt,mi;
 8 int main()
 9 {
10     scanf("%d%d",&n,&k);
11     tt=k-1;
12     for(int i=0; i<n; i++)
13     {
14         if(i<k)
15         {
16             scanf("%d",&num[i]);
17             ans+=num[i];
18             mi=ans;
19         }
20         else
21         {
22             scanf("%d",&num[i]);
23             ans+=num[i]-num[i-k];
24             if(ans<mi)
25             {
26                 tt=i;
27                 mi=ans;
28             }
29         }
30     }
31     printf("%d",tt-k+2);
32     return 0;
33 }
View Code

C:水题,对于连续的数量大于1的字符,最好的情况是212121····

 1 #include<cstdio>
 2 #include<cstring>
 3 #define maxn 200009
 4 using namespace std;
 5 
 6 char s[maxn],t[maxn];
 7 int co[maxn];
 8 int cnt,num;
 9 
10 int main()
11 {
12     scanf("%s",s);
13     int l=strlen(s);
14     t[cnt]=s[0];
15     num=1;
16     for(int i=1;i<l;i++)
17     {
18         if(s[i]!=s[i-1])
19         {
20             co[cnt++]=num;
21             num=1;
22             t[cnt]=s[i];
23         }
24         else num++;
25     }
26     co[cnt++]=num;
27     int in=-1;
28     co[cnt]=1;
29     for(int i=0;i<=cnt;i++)
30     {
31         if(co[i]==1)
32         {
33             int dd=0;
34             for(int j=in+1;j<i;j++)
35             {
36                 co[j]=2-dd;
37                 dd=1-dd;
38             }
39             in=i;
40         }
41     }
42     for(int i=0;i<cnt;i++)
43     {
44         while(co[i]--)putchar(t[i]);
45     }
46     return 0;
47 }
View Code

D:二分+贪心的题。挺简单的

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #define maxn 100005
 5 using namespace std;
 6 
 7 int p[maxn],v[maxn],a;
 8 int n,m;
 9 bool vis[maxn];
10 bool ok(int x)
11 {
12     int tmp=a;
13     int cnt=1;
14     memset(vis,0,sizeof vis);
15     for(int i=x-1;i>=0;i--)
16     {
17         if(p[n-cnt]<v[i])tmp-=(v[i]-p[n-cnt]);
18         cnt++;
19         if(tmp<0)return 0;
20     }
21     return 1;
22 }
23 
24 int main()
25 {
26     scanf("%d%d%d",&n,&m,&a);
27     for(int i=0;i<n;i++)
28         scanf("%d",&p[i]);
29     for(int i=0;i<m;i++)
30         scanf("%d",&v[i]);
31     sort(v,v+m);
32     sort(p,p+n);
33     int l=0,r=min(m,n);
34     while(l<=r)
35     {
36         int mid=(l+r)>>1;
37         if(ok(mid))l=mid+1;
38         else r=mid-1;
39     }
40     int sum=0,tt;
41     for(int i=0;i<r;i++)
42         sum+=v[i];
43     if(sum>a)tt=sum-a;
44     else tt=0;
45     printf("%d %d
",r,tt);
46     return 0;
47 }
View Code
原文地址:https://www.cnblogs.com/yours1103/p/3419869.html