2011百校联动“菜鸟杯”程序设计公开赛-解题报告
2011-12-19 22:58
295 查看
具体分析见:
http://page.renren.com/601081183/note/791507956?ref=minifeed&sfet=2012&fin=5&ff_id=601081183&feed=page_blog&tagid=791507956&statID=page_601081183_2&level=1
下面部分是转载的。
4143 :a simple game
4144 :Bacon's Cipher
4145
4146
4147
4148
4149
4150
4151 这题可以二分。。我是很暴力的。。
4152
http://page.renren.com/601081183/note/791507956?ref=minifeed&sfet=2012&fin=5&ff_id=601081183&feed=page_blog&tagid=791507956&statID=page_601081183_2&level=1
下面部分是转载的。
4143 :a simple game
#include <iostream> #include<math.h> using namespace std; #define N 1000000009 void solve(int n) { int i,flag=0,k; int min=N; for(i=1;i<=sqrt(n)+1;i++) { if(n%i==0) { k=1; int r=n/i; if(r>=i) k=r-i; else k=i-r; if(k%2==0&&k!=0) { flag=1; int x=k/2; if(x<min) min=x; } } } if(!flag) printf("-1\n"); else printf("%d\n",min); } int main() { int n; int t; scanf("%d",&t); while(t--) { scanf("%d",&n); solve(n); } return 0; }
4144 :Bacon's Cipher
#include<iostream> #include<math.h> using namespace std; int hroh(int a[]) { int s=0,i; for(i=4;i>=0;i--) s=s+a[4-i]*(int)pow((float)2,(float)i); return s; } int main() { int l; char a[10001]; while(cin>>l>>a) { int i,k=0,j=0,c[2001]; int b[5]; for(i=0;i<l;i++) {k++; if(a[i]>='A'&&a[i]<='Z') {b[i%5]=0;} else if(a[i]>='0'&&a[i]<='9') { b[i%5]=1;} if(k%5==0) {c[j++]=hroh(b);} } for(i=0;i<j;i++) // printf("%d ",c[i]+65);cout<<endl; // for(i=0;i<j;i++) printf("%c",c[i]+65); cout<<endl; } }
4145
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct point { double x,y; }p[100010],a,b; double dis(point a,point b) { return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y); } int cmp(point x,point y) { return dis(x,a)<dis(y,a); } double max(double a,double b) { return a>b?a:b; } double min(double a,double b) { return a<b?a:b; } double aa[100010]; int main() { int t; int i,j,n; scanf("%d",&t); while(t--) { scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y); scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%lf%lf",&p[i].x,&p[i].y); } double ans=1000000000; sort(p+1,p+n+1,cmp); aa =dis(p ,b); for(i=n-1;i>=1;i--) { aa[i]=max(dis(p[i],b),aa[i+1]); } double tmp=aa[1]; for(i=1;i<n;i++) { tmp=min(tmp,aa[i+1]+dis(p[i],a)); } tmp=min(dis(p ,a),tmp); printf("%.0lf\n",tmp); } }
4146
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int MAXN=1024; int map[MAXN][MAXN]; int row[MAXN]; int col[MAXN]; char buffer[MAXN]; int read() { int ret=0; char c; while((c=getchar())==' '||c=='\n'||c=='\r'); ret=c-'0'; while((c=getchar())!=' '&&c!='\n'&&c!='\r') ret=ret*10+c-'0'; return ret; } int main() { int n,i,j; char ch; int t; int casenum; t=read(); for(casenum=1; casenum<=t; casenum++) { memset(row,0,sizeof(row)); memset(col,0,sizeof(col)); n=read(); for(i=1; i<=n; i++) { scanf("%s",buffer+1); for(j=1; j<=n; j++) { map[i][j]= (buffer[j]=='b' ? 0: 1); } } int opnum; int a,b; opnum=read(); while(opnum--) { a=read(); b=read(); row[a]=!row[a]; col[b]=!col[b]; } int ans=0; for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { if(row[i]^col[j]) map[i][j]=!map[i][j]; ans+=map[i][j]; } } printf("Case #%d: ",casenum); printf("%d\n",ans); } return 0; }
4147
#include<iostream> #include <string> using namespace std; int main() { string t; int n,B,D,f,F; int ans; int i,j,cnt_a,cnt_b,cnt_c; while(cin>>n>>B>>D>>f>>F){ ans=~0U>>1; for(j=1; j<=n; j++){ cnt_a=0; cnt_b=0; cnt_c=0; cin>>t; for(i=0; i<t.size(); i++){ switch(t[i]){ case 'A':cnt_a++;break; case 'B':cnt_b++;break; case 'C':cnt_c++;break; } } int now=cnt_a*B + cnt_a*D + cnt_a*f; now+=cnt_b*2*B + cnt_b*D*2 + cnt_b*F; now+=cnt_c*3*B + cnt_c*D*3 + cnt_c*F*2; if(now<ans) ans=now; } cout<<ans<<endl; } return 0; }
4148
#include<iostream> using namespace std; int s[40]; char str[40][10000]; void solve() { int i,j,q; s[1]=1; s[2]=2; str[2][0]='1'; str[2][1]='1'; str[2][2]='\0'; for(i=3;i<=30;i++) { int len=strlen(str[i-1]); int k=0; for(j=0;j<len;j++) { char t=str[i-1][j];int cnt=0; for(q=j;q<len;q++) { if(str[i-1][j]==str[i-1][q]) { cnt++; } else break; } j=q-1; str[i][k++]=cnt+'0'; str[i][k++]=t; } str[i][k]='\0'; len=strlen(str[i]); // puts(str[i]); s[i]=len; } } int main() { solve(); int n; while(cin>>n&&n) { printf("%d\n",s ); } return 0; }
4149
#include<stdio.h> int main() { int cas; scanf("%d",&cas); while(cas--) { int x[8],sum,i; for( i=0; i<8; i++) { scanf("%d",&x[i]); } scanf("%d",&sum); int jin=0,flag=1; int ans[35],at=0; while(flag) { int now=0; //表示当前这位只和 flag=0; for( i=0; i<8; i++) { now+=1& x[i]; x[i]=x[i]>>1; if(x[i]!=0) flag=1; } if((now+jin)%2==0) { if((1&sum)==1) { ans[at++]=1; jin=(8-now+jin)/2; //如果当前这些位是取反的,需要8-now,jin(进位)不影响 } else { ans[at++]=0; jin=(now+jin)/2; } } else { if((1&sum)==1) { ans[at++]=0; jin=(now+jin)/2; } else { ans[at++]=1; jin=(8-now+jin)/2; } } sum=sum>>1; if(jin!=0 || sum!=0) flag=1; } int res=0,two=1; for(i=0; i<at; i++) { res+=two*ans[i]; two*=2; } printf("%d\n",res); } return 0; }
4150
#include<iostream> using namespace std; char str[1000009]; char temp[10]; int main() { int t,i,j; cin>>t; while(t--) { int ans=0; scanf("%s%s",str,temp); // cin>>str;cin>>temp; int lena=strlen(str); int lenb=strlen(temp); int l=0; for(i=0;i<lena;i++) { if(str[i]==temp[0]) { int l=i+1; for(j=1;j<lenb;j++,l++) { if(str[l]!=temp[j]) break; } if(j==lenb) { ans++; i=l-1; } } } printf("%d\n",ans); } return 0; }
4151 这题可以二分。。我是很暴力的。。
#include<iostream> using namespace std; #define N 11000001 bool f ; void solve() { int i,j,k,l,m,n,o,p,q; for(i=1;i<=9;i++) f[i]=1; for(i=1;i<=9;i++) for(j=0;j<=9;j++) { if(i!=j) f[i*10+j]=1; } for(i=1;i<=9;i++) { for(j=0;j<=9;j++) { if(i!=j) for(k=0;k<=9;k++) if(j!=k&&k!=i) f[i*100+j*10+k]=1; } } for(i=1;i<=9;i++) { for(j=0;j<=9;j++) { if(j!=i) { for(k=0;k<=9;k++) { if(k!=j&&k!=i) { for(l=0;l<=9;l++) if(l!=k&&l!=j&&l!=i) f[i*1000+j*100+k*10+l]=1; } } } } } for(i=1;i<=9;i++){ for(j=0;j<=9;j++) { if(j!=i) { for(k=0;k<=9;k++) { if(k!=j&&k!=i) { for(l=0;l<=9;l++) if(l!=k&&l!=i&&l!=j) { for(m=0;m<=9;m++) if(m!=l&&m!=i&&m!=j&&m!=k) f[i*10000+j*1000+k*100+l*10+m]=1; } } } } } } for(i=1;i<=9;i++){ for(j=0;j<=9;j++) { if(j!=i) { for(k=0;k<=9;k++) { if(k!=j&&k!=i) { for(l=0;l<=9;l++) if(l!=k&&l!=i&&l!=j) { for(m=0;m<=9;m++) if(m!=l&&m!=i&&m!=j&&m!=k) { for(n=0;n<=9;n++) if(n!=m&&n!=i&&n!=j&&n!=k&&n!=l) f[i*100000+j*10000+k*1000+l*100+m*10+n]=1; } } } } } } } for(i=1;i<=9;i++){ for(j=0;j<=9;j++) { if(j!=i) { for(k=0;k<=9;k++) { if(k!=j&&k!=i) { for(l=0;l<=9;l++) if(l!=k&&l!=i&&l!=j) { for(m=0;m<=9;m++) if(m!=l&&m!=i&&m!=j&&m!=k) { for(n=0;n<=9;n++) if(n!=m&&n!=i&&n!=j&&n!=k&&n!=l) { for(o=0;o<=9;o++) if(o!=n&&o!=i&&o!=j&&o!=k&&o!=l&&o!=m) f[i*1000000+j*100000+k*10000+l*1000+m*100+n*10+o]=1; } } } } } } } } } int main() { solve(); int n; int ans=0,i; while(cin>>n) { ans=0; for(i=1;i<n;i++) if(f[i]) ans++; printf("%d\n",ans); } return 0; }
4152
#include<cstdio> #include<cstring> int hab[20][25]; int main() { int n,m; int i,j,k; int sat[25]; while(scanf("%d",&n) != EOF) { for( i=0; i<n; i++) scanf("%d",&sat[i]); scanf("%d",&m); for( i=0; i<m; i++) { for( j=0; j<n; j++) { scanf("%d",&hab[i][j]); } } int res=0,r[20]; int to=1<<m; for( i=1; i<to; i++) { int tr[20],tt=0; int tsat[25]; memset(tsat,0,sizeof(tsat)); for( j=0; j<m; j++) if( (i>>j) & 1) { tr[tt++]=j; for( k=0; k<n; k++) { tsat[k]+=hab[j][k]; } } int flag=1; for(int j=0; j<n; j++) { if(tsat[j]<sat[j]) { flag=0; break; } } if(flag && tt==res){ for( j=0; j<tt; j++) { if(tr[j]>r[j]) { flag=0; break; } } } if(flag && tt>=res) { res=tt; for( j=0; j<res; j++) { r[j]=tr[j]; } } } printf("%d",res); for(int i=0; i<res; i++) { printf(" %d",r[i]+1); } puts(""); } }
相关文章推荐
- 2011百校联动“菜鸟杯”程序设计公开赛&&Length of S(n)
- 2011百校联动“菜鸟杯”程序设计公开赛 &&Powerful Incantation
- 2011百校联动“菜鸟杯”程序设计公开赛&&Cover The Enemy
- 2011百校联动“菜鸟杯”程序设计公开赛(现更新5道)
- 2011百校联动“菜鸟杯”程序设计公开赛&&Flip Game
- 2011阿里巴巴程序设计公开赛 / 解题报告 8.18
- 2011阿里巴巴程序设计公开赛 / 解题报告 8.18
- 2011百校联动“菜鸟杯”程序设计公开赛&&Bacon's Cipher
- 2011百校联动“菜鸟杯”程序设计公开赛&&Magic Potion
- 2011百校联动“菜鸟杯”程序设计公开赛&&KFC -Z+W
- 2011百校联动“菜鸟杯”程序设计公开赛
- 2011百校联动“菜鸟杯”程序设计公开赛_A A Simple Problem
- 2011百校联动“菜鸟杯”程序设计公开赛
- 2011百校联动“菜鸟杯”程序设计公开赛_BBacon's Cipher
- 第八届北航程序设计大赛网络预赛解题报告
- 2012年BNU新生程序设计大赛解题报告【非官方版】
- 2011 ACM/ICPC 福州赛区网络赛解题报告
- 2013年4月_武科大程序设计大赛_解题报告(problem 1006)
- NOIP2011解题报告-Day1
- LuoguP1314[NOIP2011] 聪明的质监员 解题报告【二分答案+前缀和】