hdu 1544 双向找回文数个数
来源:互联网 发布:windows安装无法继续 编辑:程序博客网 时间:2024/05/21 14:54
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<queue>using namespace std;char s[5050];int main(){ int p,i,half,left,right,cnt; while(scanf("%s",s)!=EOF) { i=strlen(s); cnt=0; for(p=0;p<i-1;p++)//遍历的移动 从左向右 { half=((i-1)-p)/2; if(((i-1)-p)%2==0) { left=p+half-1; right=p+half+1; } else { left=p+half; right=p+half+1; } while(left>=p) if(s[left]==s[right]) { cnt++; left--; right++; } else break; }//从右向左移动 for(p=i-2;p>=1;p--)//总倒数第二项到第一项 因为 从最后一项到第0项会跟上面的部分重复 { half=p/2; if(p%2==0) { left=half-1; right=half+1; } else { left=half; right=half+1; } while(left>=0) { if(s[left]==s[right]) { cnt++; left--; right++; } else break; } } printf("%d\n",cnt+i); }}