用了1天才A掉USACO 1.1的题目,现在简直弱爆了。
都是水题没啥好说的。
Your Ride Is Here
/* ID:xueyifa4 LANG:C++ TASK:ride */ #include <iostream> #include <fstream> #include <cstring> #include <cstdlib> #include <cstdio> using namespace std; int main() { FILE *fin = fopen("ride.in", "r"); FILE *fout = fopen("ride.out", "w"); char ch; int a = 1, b = 1; while ((ch = fgetc(fin)) != '\n') a = (a * (ch - 'A' + 1)) % 47; while ((ch = fgetc(fin)) != '\n') b = (b * (ch - 'A' + 1)) % 47; if (a == b) fprintf(fout, "GO\n"); else fprintf(fout, "STAY\n"); return 0; }
/* ID:xueyifa4 TASK:gift1 LANG:C++ */ #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <map> #include <vector> #include <fstream> using namespace std; int n, money[10]={0}; string name[10]; int get_name(string s) { for (int i = 0; i != n; ++ i) if (name[i] == s) return i; } #define fin cin #define fout cout int main() { ifstream fin("gift1.in"); ofstream fout("gift1.out"); cin >> n; for (int i = 0; i != n; ++ i) cin>>name[i]; for (int i = 0; i != n; ++ i) { int init, t, gei; string tmp_name; cin >> tmp_name; cin >> init >> t; if (!t) continue; money[get_name(tmp_name)] -= init/t*t; init /= t; while (t --) { string tmp; cin >> tmp; money[get_name(tmp)] += init; } } for (int i = 0; i != n; ++ i) cout<<name[i]<<" "<<money[i]<<endl; return 0; }这题想说一下。。本来想用map直接来检索姓名的,但是好像完全忘记怎么用了。。就用了O(n)的搜索,回头把C++ PRIMER重新读完,应该能都回忆起来了...
Friday the Thirteenth
/* ID:xueyifa4 PROG:friday LANG:C++ */ #include <iostream> #include <fstream> #include <cstring> #include <cstdlib> #include <cstdio> using namespace std; int mouth[13] = {0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; const int RUN = 29; const int PING = 28; int TOT[8] = {0}; int check (int k) { if (!(k % 100)) if (!(k % 400)) return RUN; else return PING; if (!(k % 4)) return RUN; return PING; } int main() { ofstream fout("friday.out"); ifstream fin("friday.in"); int n, w = 2; fin >> n; for (int i = 0; i != n; ++ i) { mouth[2] = check(1900 + i); for (int j = 1; j <= 12; ++ j) for (int k = 1; k <= mouth[j]; ++ k) { w = (w + 1) % 7; if (!w) w = 7; if (k == 13) ++TOT[w]; } } for (int i = 1; i != 7; ++ i) fout<<TOT[i]<<" "; fout<<TOT[7]<<endl; return 0; }
Broken Necklace
这题我写的还是比较傻逼的,好像比别人的长好多的样子。我不会告诉你,我写这题用了3个小时QAQ, 提交还WA掉一次...
/* ID:xueyifa4 PROG:beads LANG:C++ */ #include <cstdio> #include <fstream> #include <cstdlib> #include <cstring> #include <iostream> #include <vector> using namespace std; int n, flag1 = 0, flag2 = 0, ans = 0; const int max_n = 350 * 4; char c[max_n]; class Point { public: int b, r; int s() { return max(b, r); } Point():b(5), r(5){} Point(char k) { switch (k) { case 'w': b = 1, r = 1; break; case 'b': b = 1; r = 0; break; case 'r': r = 1; b = 0; break; } } }f1[max_n], f2[max_n]; #define cin fin #define cout fout int main() { ifstream fin("beads.in"); ofstream fout("beads.out"); cin >> n; for (int i = 0; i != n; ++ i) cin >> c[i]; for (int i = 0; i != n; ++ i) f1[i] = Point(c[i]); for (int i = 0; i != n; ++ i) flag1 += f1[i].b, flag2 += f1[i].r; memmove(c + n, c, sizeof(char) * n); memmove(c + n + n, c,sizeof(char) * n); memmove(f1 + n, f1, sizeof(Point) * n); memmove(f1 + n + n, f1, sizeof(Point) * n); memmove(f2 , f1, sizeof(Point) * n * 3); for (int i = 1; i != 3 * n; ++ i) { if (f1[i].b) f1[i].b += f1[i - 1].b; if (f1[i].r) f1[i].r += f1[i - 1].r; } for (int i = 3 * n - 2; i >= 0; -- i) { if (f2[i].b) f2[i].b += f2[i + 1].b; if (f2[i].r) f2[i].r += f2[i + 1].r; } for (int i = n; i != n * 2; ++ i) ans = max(ans, f1[i].s() + f2[i + 1].s()); cout << min(ans, n) << endl; return 0; }