USACO--Section1.3--Calf Flac【字符串】
来源:互联网 发布:linux 文件夹用户权限 编辑:程序博客网 时间:2024/05/21 17:34
题目大意:输入最长两万个字符,判断最长的英文字母回文子串,输出长度和子串。
其实是挺简单的字符串题,方法是枚举每一位是子串的中间值,有字串长度奇数、偶数两种情况,分别考虑。但是字符串题很麻烦,尤其这道题是多行输入,我最开始用gets输入,但是最后结果没有换行符,我又再每次读完一行后在最后一个字符处加换行符,可是这样有一组样例最大字串的中间值是回车,导致总长度多了1。最后新设了一个标记数组,记录第几位有回车,输出按照输出字符的方式,到了特定位置如果有回车就输出回车,最后再输出一个回车。这样导致的结果是有可能最后一个字符后面有回车,判断输出了,结束又一个回车,就多输出了一个回车,又WA了一发,总共WA了5发以上,实在不够机智。
/*ID: zz401LANG: C++TASK: calfflac*/#include<cstring>#include<fstream>#include<iostream>#include<iomanip>#include<cstdio>#include<cmath>#include<cctype>#include<algorithm>#include<queue>#include<vector>#include<stack>#include<ctime>#include<cstdlib>#define PI acos(-1.0)using namespace std;char a[20005];int bn[20005]={0};int sum,p,q,ls,rs,l,maxm,maxml,maxmr;void solve(int i){ p = ls = i - 1; q = rs = i + 1; sum = 1; while(1){ while(ls>=0&&!isalpha(a[ls])) ls--; if(ls<0) break; while(rs<l&&!isalpha(a[rs])) rs++; if(rs>=l) break; if(toupper(a[ls])==toupper(a[rs])){ sum+=2; p = ls; q = rs; } else break; ls--; rs++; } if(sum>maxm){ maxm = sum; maxml = p; maxmr = q; }}void solve2(int i1,int i2){ p = ls = i1 - 1; q = rs = i2 + 1; sum = 2; while(1){ while(ls>=0&&!isalpha(a[ls])) ls--; if(ls<0) break; while(rs<l&&!isalpha(a[rs])) rs++; if(rs>=l) break; if(toupper(a[ls])==toupper(a[rs])){ sum+=2; p = ls; q = rs; } else break; ls--; rs++; } if(sum>maxm){ maxm = sum; maxml = p; maxmr = q; }}int main(){ freopen ("calfflac.in", "r", stdin); freopen ("calfflac.out", "w", stdout); int i; l = 0; maxm = maxml = maxmr = 1; while(gets(a+l)){ l = strlen(a); bn[l-1] = 1; } for(i=0;i<l;i++){ solve(i); if(i-1>=0&&toupper(a[i])==toupper(a[i-1])) solve2(i-1,i); if(i+1<l&&toupper(a[i+1]==toupper(a[i]))) solve2(i,i+1); } printf("%d\n",maxm); for(i=maxml;i<=maxmr;i++){ printf("%c",a[i]); if(bn[i]==1) printf("\n"); } if(bn[i-1]!=1) printf("\n"); return 0;}
0 0
- USACO--Section1.3--Calf Flac【字符串】
- Usaco 1.3.3 Calf Flac
- [USACO 1.3.3] Calf Flac
- usaco 1.3.3 Calf Flac
- USACO 1.3.3 Calf Flac
- USACO 1.3.3 Calf Flac
- USACO 1.3.3 Calf Flac (calfflac)
- USACO Section 1.3.3 Calf Flac
- 【USACO题库】1.3.3 Calf Flac
- JZOJ1248.【USACO题库】1.3.3 Calf Flac
- Calf Flac(USACO)
- USACO 1.3-Calf Flac
- [USACO] Calf Flac
- usaco Calf Flac
- USACO 1.3 Calf Flac
- USACO 1.3 Calf Flac
- usaco Calf Flac
- USACO:Calf Flac
- 南湾已经好久没有下这么大的雨了把。
- 【计算机网络常见面试题】端口及其对应的服务
- Warning: Unknown: write failed: No space left on device (28) in Unknown on line 0
- 【计算机网络常见面试题】ICMP协议?
- 图像拼接
- USACO--Section1.3--Calf Flac【字符串】
- 【转】一个问题引发的"血案" 之 文件的读写原理(fread, fwrite, fflush)
- 题目1069:查找学生信息
- TDOA定位中的广义相关(Generalized Cross Correlation)算法仿真
- 【计算机网络常见面试题】TFTP协议?
- cocos2d-x环境配置-报错,Fatal signal 11 (SIGSEGV) at 0x00000000-windows-android
- 【计算机网络常见面试题】HTTP协议?
- Android的XML布局文件中layout_width和width的区别
- 面试来自Google的Android Engineer