Codeforces Round #231 (Div. 2)A-D
来源:互联网 发布:淘宝商城布艺沙发 编辑:程序博客网 时间:2024/03/28 18:38
A题:
不解释,注意任意一个位置的数必须大于等于1
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#define LL __int64using namespace std;int main(){ int i,l1,l2; char str[100001]; while(~scanf("%s",str)) { int len=strlen(str); for(i=0;i<len;i++) { if(str[i]=='+')l1=i; if(str[i]=='=')l2=i; } int a=l1; int b=l2-l1-1; int c=len-l2-1; if(a+b==c) { cout<<str<<endl; } else if((a+b+2==c)||(a+b==c+2)) { if(a+b+2==c) { a++; c--; } else if(a+b==c+2) { if(a<b)b--; else a--; c++; } for(i=0;i<a;i++)cout<<"|"; cout<<"+"; for(i=0;i<b;i++)cout<<"|"; cout<<"="; for(i=0;i<c;i++) { cout<<"|"; } cout<<endl; } else { cout<<"Impossible"<<endl; } } return 0;}
B题:
枚举最后一位,然后根据最后一位推出前面的数。
注意,当推出第一位的时候,一定要判断此时的余数,要不然就sad了。。
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#define LL __int64using namespace std;int a[1100000];int b[1100000];int c[1100000];int main(){ // freopen("data.in","r",stdin); // freopen("data.out","w",stdout); int i,l1,l2,h,j,n,x,ii; int f; char str[100001]; int leap=0; while(~scanf("%d%d",&n,&x)) { leap=0; for(ii=1;ii<=9;ii++) { a[1]=ii; b[1]=ii; f=0; for(j=2;j<=n+1;j++) { b[j-1]=((a[j-1]*x)%10+f); f=0; if(b[j-1]>9) { f++; b[j-1]=(b[j-1])%10; } a[j]=b[j-1]; f+=(a[j-1]*x)/10; } if(b[n]==a[1]&&a[n]!=0&&f==0) { if(leap==0) { for(i=1;i<=n;i++) { c[i]=a[i]; } leap++; } else { leap++; int ll=0; for(i=n;i>=1;i--) { if(ll==1)c[i]=a[i]; else { if(c[i]==a[i])c[i]=a[i]; else if(c[i]<a[i])break; else if(c[i]>a[i]) { ll=1; c[i]=a[i]; } } } } } } if(leap==0) { cout<<"Impossible"<<endl; } else { for(i=n;i>=1;i--) { printf("%d",c[i]); } cout<<endl; } } return 0;}C题:贪心
在放置牌的时候,两行一起放。
优先放01,然后下面放10,如果没有就放00,如果再没有就放11.
没有01的时候,优先放00,下面放11,没有11放00.
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#define LL __int64using namespace std;int a[1001];int maps[1001][1001];int main(){ int i,l1,l2,h,j,n,x,ii,m; int f; char str[100001]; int leap=0; while(~scanf("%d%d",&n,&m)) { for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { scanf("%d",&x); if(x==10)x=1; a[x]++; } } for(i=2;i<=n;i+=2) { for(j=1;j<=m;j++) { if(a[1]!=0) { maps[i-1][j]=1; a[1]--; if(a[1])maps[i][j]=10,a[1]--; else if(a[0])maps[i][j]=0,a[0]--; else maps[i][j]=11,a[11]--; } else if(a[11]!=0) { maps[i][j]=11; a[11]--; if(a[0])a[0]--,maps[i-1][j]=0; else a[11]--,maps[i-1][j]=11; } else if(a[0]!=0) { maps[i][j]=0; maps[i-1][j]=0; } } } if(n%2) { for(j=1;j<=m;j++) { if(a[1])a[1]--,maps[n][j]=1; else if(a[0])a[0]--,maps[n][j]=0; else a[11]--,maps[n][j]=11; } } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { printf("%02d ",maps[i][j]); } cout<<endl; } } return 0;}
D题:
水题,当时竟然没看,SAD了。。。
我们可以枚举第一位的值。
然后三分倍数x。
由题意可以轻而易举的读出,随着x的增大,最终的结果是先减小后增大的。
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#define INF 99999999using namespace std;int a[1000001];int n;int dos(int st,int x){ int mx=0; for(int i=0;i<n;i++) { mx=max(mx,abs(st+x*i-a[i])); } return mx;}int main(){ int i; while(~scanf("%d",&n)) { int sum=0; for(i=0;i<n;i++) { scanf("%d",&a[i]); } sort(a,a+n); for(i=1;i<n;i++)sum+=a[i]-a[i-1]; int mid1,mid2,p1,p2; int biao=dos(a[0],sum/(n-1)); int as,bs; as=a[0]; bs=sum/(n-1); //cout<<sum<<" "<<biao<<endl; for(i=a[0]-biao;i<=a[0]+biao;i++) { int ll=0; int rr=a[n-1]-a[0]; while(ll<=rr) { mid1=ll+(rr-ll)/3; mid2=rr-(rr-ll)/3; p1=dos(i,mid1); p2=dos(i,mid2); if(p1<p2)rr=mid2-1; else ll=mid1+1; } p1=dos(i,ll-1); if(biao>p1) { biao=p1; as=i; bs=ll-1; } } cout<<biao<<endl; cout<<as<<" "<<bs<<endl; } return 0;}
0 0
- Codeforces Round #231 (Div. 2)A-D
- Codeforces Round #209 (Div. 2) <A-D>
- Codeforces Round #235 (Div. 2) A~D
- Codeforces Round #237 (Div. 2) A~D
- Codeforces Round #240 (Div. 2) A~D
- Codeforces Round #239 (Div. 2) A~D
- Codeforces Round #242 (Div. 2) <A-D>
- Codeforces Round #250 (Div. 2) A-D
- Codeforces Round #256 (Div. 2)A-D
- Codeforces Round #263 (Div. 2) A-D
- Codeforces Round #269 (Div. 2) A~D
- Codeforces Round #358 (Div. 2)A~D
- Codeforces Round #359 (Div. 2) A ~D
- Codeforces Round #364 (Div. 2)(A ~ D)
- Codeforces Round #368 (Div. 2) A~D
- Codeforces Round #369 (Div. 2) A~D
- Codeforces Round #369 (Div. 2) A~D
- Codeforces Round #374 (Div. 2) A~D
- 蓝桥杯基础练习--特殊的回文数
- dede文件目录
- mysql命令行备份与导入
- vijos1080题解
- win8.1窗口动画设置
- Codeforces Round #231 (Div. 2)A-D
- Ubuntu 下 nginx , php , mysql 和 golang 的简单安装
- 当好但不够好时:今天我创业失败了
- 蓝桥杯基础练习--十进制转十六进制
- vijos1090题解
- jquery 控制textArea 随文本增加而变高
- 正则表达式总结
- C语言unlink删除文件
- 关于异常捕获后程序的去向