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 }
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 }
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 }
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\n",r,tt); 46 return 0; 47 }