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;
}
posted @ 2011-02-20 19:39  like@neu  阅读(283)  评论(0编辑  收藏  举报