Uvalive6439(Pasti Pas!)
2015-08-24 17:04
288 查看
题意:将给定字符串的部分子串用字符代替,使新得到的串成为回文串,并且得到的回文串长度最大。
如: S = `ABCADDABCA',让α=ABCA,β=DD,则新得到的回文串为αβα,长度为3。
让α= `A',β = `BC', γ = `D', 则S= α
βα
γγα
βα ,长度为8.
思路:
方法一:利用string类的加法进行模拟。注意中间部分的特判即可。
方法二:hash法,给每个不同的子串赋以不同的值,两边往中间扫描判断。
如: S = `ABCADDABCA',让α=ABCA,β=DD,则新得到的回文串为αβα,长度为3。
让α= `A',β = `BC', γ = `D', 则S= α
βα
γγα
βα ,长度为8.
思路:
方法一:利用string类的加法进行模拟。注意中间部分的特判即可。
#include<cstdio> #include<string.h> #include<string> using namespace std; char a[50005]; int main(){ int t,tc=0; scanf("%d",&t); while(t--){ scanf("%s",a); int len=strlen(a); string l="",r=""; int ans=0; for(int i = len-1; i >= len/2; i--){ l=l+a[len-1-i]; r=a[i]+r; if(l==r&&len-1-i!=i){ ans+=2; l.clear(); r.clear(); } if(i==len/2&&!l.empty()) ans++; } printf("Case #%d: %d\n",++tc,ans); } return 0; }
方法二:hash法,给每个不同的子串赋以不同的值,两边往中间扫描判断。
#include<cstdio> #include<cstring> const int maxn=5e4+5; char a[maxn]; unsigned long long hash[maxn]; int main(){ int t,tc=0; hash[0]=1; for(int i = 1; i < maxn; i++) hash[i]=hash[i-1]*37; scanf("%d",&t); while(t--){ scanf("%s",a); int len=strlen(a); int l=0,r=len-1,cnt=0,ans=0; unsigned long long lnum=0,rnum=0; while(1){ if(l==r){ans++;break;} if(l>r){if(lnum||rnum)ans++;break;} lnum+=hash[cnt]*(a[l]-'A'); rnum=rnum*37+(a[r]-'A'); l++; r--; cnt++; if(lnum==rnum){ans+=2;lnum=rnum=cnt=0;} } printf("Case #%d: %d\n",++tc,ans); } return 0; }
相关文章推荐
- MongoDB count distinct group by JavaAPI查询
- bzoj4004[JLOI2015]装备购买
- MYSQL的常用命令和增删改查语句和数据类型
- interrupt的问题
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- Nginx 与Tomcat 实现动静态分离、负载均衡
- swt中setToolTipText()失效问题和setToolTipText()部分测试
- Android 打造形形色色的进度条 实现可以如此简单
- CSU_1508_地图的四着色
- Android百度地图SDK:隐藏比例尺,隐藏百度LOGO,隐藏缩放控件
- 2015 8 23 文件 I /O 慕课网
- 计数排序C++实现
- centos 6.6搭建seafile私有云盘
- Android性能优化典例(二)
- RHEL7.1安装ftp
- 5 个强大的HTML5 API
- 统计简单学_变异数分析
- Android性能优化典例(二)
- 程序员未来发展三大方向
- 【Python】关于递进错误indentationerror