由于这次的题解字数比较多。所以我只把代码贴出来,大家好好看看。
ZJU1003-Crashing Balloon
【程序代码】
#include <iostream> #include <cstdio> using namespace std; bool aTrue,bTrue; int judge(int m,int n,int p) { if(m==1&&n==1) { aTrue=true; return 0; } if(n==1) bTrue=true; while(p>0) { if(m%p==0) judge(m/p,n,p-1); if(n%p==0) judge(m,n/p,p-1); p--; } return 0; } int main() { int a,b; while(scanf("%d%d",&a,&b)!=EOF) { int temp; if(a<b) { temp=a; a=b; b=temp; } aTrue=false;bTrue=false; judge(a,b,100); if(!aTrue&&bTrue) printf("%d\n",b); else printf("%d\n",a); } return 0; }
zju1006-Do the Untwist
【程序代码】
#include <iostream> #include <string> using namespace std; int main() { int k; char a[80]; char c[80]; int b[100]; while(cin>>k&&k) { cin>>a; int n=strlen(a); for(int i=0;i<n;i++) { if(a[i]>='a'&&a[i]<='z') b[i]=a[i]-96; else if(a[i]=='_') b[i]=0; else b[i]=27; } int d[100]; for(int i=0;i<n;i++) { int t=k*i%n; d[t]=(b[i]+i)%28; } for(int i=0;i<n;i++) { if(d[i]>0&&d[i]<27) c[i]=d[i]+96; else if(d[i]==0) c[i]='_'; else c[i]='.'; } for(int i=0;i<n;i++) cout<<c[i]; cout<<endl; } return 0; }
zju1005-Jugs
【程序代码】
#include <stdio.h> #include <stdlib.h> //a pour b int main() { int a,b,n,t; while(scanf("%d%d%d",&a,&b,&n)){ if(a==1){ for(t = 1;t<=n;t++) printf("fill A\npour A B\n"); printf("success\n"); continue; } t = 0; while(t!=n){ printf("fill A\npour A B\n"); t+=a; if(t>=b){ t-=b; printf("empty B\npour A B\n"); } } printf("success\n"); } return 0; }
ZJU1009-Enigma
【程序代码】
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; int main() { int i,j; int iChange[3][26]; int iConvert[3]; char cTemp[1000]; int iCase=0; int m; while(scanf("%d",m)&&m) { if(iCase++) printf("\n"); printf("Enigma %d:\n",iCase); for(i=0;i<3;i++) { scanf("%s",&cTemp); for(j=0;j<m;j++) iChange[i][cTemp[j]-'A']=j-(cTemp[j]-'A'); } int n; scanf("%d",&n); while(n--) { scanf("%s",&cTemp); for(i=0;i<strlen(cTemp);i++) { iConvert[0]=i%m; iConvert[1]=(i/m)%m; iConvert[2]=(i/(m*m))%m; int t=cTemp[i]-'A'; for(j=2;j>=0;j--) { t+=iChange[j][(t-iConvert[j]+m)%m]; t=(t+m)%m; } printf("%c",t+'a'); } printf("\n"); } } return 0; }
zju1016-Parencodings
【程序代码】
#include <stdio.h> #include <string.h> int main() { int a[1000],str[10000],j,i,n,t,x,loop,k,w,flag,sum; while(scanf("%d",&t)!=EOF) { for(i=0;i<t;i++) { memset(str,0,sizeof(str)); //very important!!!!!! scanf("%d",&n); loop=0;x=0; for(j=1;j<=n;j++) //left parenthesis -1 表示 { //right parenthesis 1 表示 scanf("%d",&a[j]); //-1 1 存放在str[10000]中 for(k=loop+1;k<=a[j];k++) str[k+x]=-1; x++; str[a[j]+x]=1; // loop=a[j]+2; loop=a[j]; } flag=1; for(j=1;str[j];j++) { if(str[j]==1) { sum=0;w=0; for(k=j;;k--) { sum+=str[k]; if(str[k]==1) w++; if(sum==0)break; } if(flag==1){printf("%d",w);flag=0;} else printf(" %d",w); } } printf("\n"); } } return(0); }