虽然USACO有无数的解题报告,但是这是我的成果,晒晒水题代码。
Gift: map简单过。
/* ID: duanjia2 PROG: gift1 LANG: C++ */ #include<iostream> #include<fstream> #include<string> #include<map> using namespace std; int main() { ifstream fin("gift1.in"); ofstream fout("gift1.out"); int np,i,a,m,n; string name[12],giver,str; map<string,int> mp; fin>>np; for( i=0; i<np; i++){ fin>>name[i]; mp[name[i]]=0; } while( fin>>giver){ fin>>m>>n; if(n==0) continue; a=m/n; mp[giver]-=a*n; while( n--){ fin>>str; mp[str]+=a; } } for( i=0; i<np; i++) fout<<name[i]<<' '<<mp[name[i]]<<endl; //system("pause"); return 0; }
代码:
/* ID: duanjia2 PROG: friday LANG: C++ */ #include<iostream> #include<string.h> #include<fstream> using namespace std; int f[7]; int main() { ifstream fin("friday.in"); ofstream fout("friday.out"); int n,day,i,j; fin>>n; n+=1900; memset(f,0,sizeof(f)); day=13; for( i=1900; i<n; i++){ for( j=1; j<=12;j++){ f[day%7]++; if( j==2){ if( i%4==0&&i%100!=0||i%400==0) day+=29; else day+=28; } else if( j==4||j==6||j==9||j==11) day+=30; else day+=31; } } fout<<f[6]<<' '<<f[0]; for( i=1; i<6; i++) fout<<' '<<f[i]; fout<<endl; // system("pause") ; return 0; }
代码:
/* ID: duanjia2 PROG: beads LANG: C++ */ #include<iostream> #include<string> #include<fstream> using namespace std; char str[355]; int main() { ifstream fin("beads.in"); ofstream fout("beads.out"); int n,p,a,b,i,j,mx,w,r; fin>>n; r=0,b=0, w=0; char c1,c2; for( i=0;i<n;i++){ fin>>str[i]; if(!w&&str[i]=='w') w=1; if(!r&&str[i]=='r') r=1; if(!b&&str[i]=='b') b=1; } if(w+r+b==1) fout<<n<<endl; //只有一种颜色 else if(w+r+b==2){ //两种 a=0,b=0,mx=0; for( i=0;i<n;i+=a){ j=i; a=1; while( str[j%n]==str[(j+1)%n]) a++, j++; j=(i-1+n)%n; b=1; while( str[(j+n)%n]==str[(j-1+n)%n]) b++, j--; if(mx<a+b) mx=a+b; } fout<<mx<<endl; } else{ //三种 mx=0; for( i=0;i<n;i+=a){ j=i, a=1; c1=str[j]; while( c1==str[(j+1)%n]||str[(j+1)%n]=='w') //往右计数 a++,j++; j=(i-1+n)%n; b=1; while( (j<i||(j+n)%n>i+a)&&str[(j+n)%n]=='w'){ //往左计数 j--; b++; } c2=str[(j+n)%n]; while( (j<i||(j-1+n)%n>i+a)&&(c2==str[(j-1+n)%n]||str[(j-1+n)%n]=='w')) //从左边扫描环形到右边的情况 b++,j--; // cout<<i<<' '<<a<<' '<<b<<' '<<a+b<<endl; if(mx<a+b) mx=a+b; } fout<<mx<<endl; } // system("pause"); return 0; }