Usaco Calf Flac
经过两个多小时的coding,终于磕磕绊绊的过了。其实这个题难的地方不是解法,而是文件的输入输出。因为文件不是在一行,所以以前知道的那些从文件里面输入输出的函数全都不好使。eof这个函数以前没见过,弄了好久才会。接受能力有问题。代码主要是借鉴lrj大哥的,懒得写了。还抄错了,wa了好久。简单题目主要是考察细节的地方,如果比赛肯定遇不到这种简单题。如果说刷通usaco算入门的话,那就不足为奇了。
/* ID: like_091 PROG: calfflac LANG: C++ */ #include<iostream> #include<fstream> #include<algorithm> #include<string> #include<map> using namespace std; const int MAX = 20000 + 10; char a[MAX], b[MAX]; int p[MAX]; int main(void) { ifstream fin("calfflac.in"); int t = 0, k = 0, max = 0, c, d; while (!fin.eof()) { //如果读取到了文件尾部,返回true a[t] = fin.get(); if (isalpha(a[t])) { p[k] = t; b[k++] = toupper(a[t]); } t++; } fin.close(); for (int i = 0; i < k; i++) { for (int j = 0; i - j >= 0 && i + j < k; j++) { if (b[i - j] != b[i + j]) break; if (j * 2 + 1 > max) { max = j * 2 +1; c = p[i - j]; d = p[i + j]; } } for (int j = 0; i - j >= 0 && i + j < k - 1; j++) { if (b[i - j] != b[i + j + 1]) break; if (j * 2 + 2 > max) { max = j * 2 + 2; c = p[i - j]; d = p[i + j + 1]; } } } ofstream fout("calfflac.out"); fout<<max<<endl; for (int i = c; i <= d; i++) fout<<a[i]; fout<<endl; fout.close();//不过不关闭,是否wa? return 0; }