您的位置:首页 > 编程语言

自己的usaco代码---PROB Calf Flac

2013-08-16 22:32 399 查看
原创代码

仅供参考

欢迎评论O(∩_∩)O~

//多行字符串读入
/*
ID: 输你自己的
PROG: calfflac
LANG: C++
*/
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <cstdio>
using namespace std;
char aa[300000];
char aaa[300][82];
struct ss{char a;int b;};
ss s[22000];
int k=0;
int find(int qq){
int tmp=1;
int l,r;
l=qq-1;r=qq+1;
while((s[l].a==s[r].a||s[l].a+32==s[r].a||s[l].a-32==s[r].a)&&(l>=1&&r<=k))
{
l--;
r++;
tmp+=2;
}
return tmp;
}

int find2(int qq){
int tmp=0;
int l,r;
l=qq-1;r=qq;
while((s[l].a==s[r].a||s[l].a+32==s[r].a||s[l].a==s[r].a+32)&&(l>=1&&r<=k))
{
l--;
r++;
tmp+=2;
}
return tmp;
}
int main()
{
freopen("calfflac.in","r",stdin);
freopen("calfflac.out","w",stdout);

int re=-1;
while(gets(aaa[++k]));
for(int i=1;i<=k;i++){
for(int j=0;j<strlen(aaa[i]);j++)
aa[++re]=aaa[i][j];
aa[++re]='\n';
}
s[0].a='#';
k=0;

for(int i=0;i<strlen(aa);i++)
if(isalpha(aa[i])) {s[++k].a=aa[i]; s[k].b=i;}

int ans=0;//优化
int ks;

for(int i=1;i<=k;i++)
{
int ll=find(i);
if(ans<ll) {ans=ll; ks=i-ll/2;}
ll=find2(i);
if(ans<ll) {ans=ll; ks=i-ll/2;}
}
cout<<ans<<endl;
for(int i=s[ks].b;i<=s[ans+ks-1].b;i++)
cout<<aa[i];
cout<<endl;
return 0;
}


ps:这道题有很多坑---
1)有多行输入,特别是第五个,是一份代码

2)卡二维暴搜

自己也遇到一个问题

子程序中判断不够,导致s[0].a的比较出现,卡第八个数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息