Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
有人能告诉我为什么这个程序要跑2S多啊,别人都200ms#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn=2e6+9; char a[maxn]; int dp[maxn]; inline int max(int &a,int &b) { if(a>b) return a; return b; } int main() { int tt=0; while(1) { char tmp; for(int i=0;;) { scanf("%c",&tmp); if(tmp=='\n') {a[++i]=0;break;} else if(tmp!=' ') { a[++i]=tmp; a[++i]='#'; } } if(a[1]=='E') break; int top=0,n=strlen(a+1); dp[0]=0,a[0]=-1; for(int i=1,t,s;i<=n;i++) { if(top+dp[top]<i) { top=i; t=i-1,s=i+1; while(a[t]==a[s]) t--,s++; dp[i]=s-i-1; } else { if(dp[top-(i-top)]+i<top+dp[top]) dp[i]=dp[top-(i-top)]; else { s=top+dp[top]+1; t=i-(s-i); while(a[t]==a[s]) t--,s++; dp[i]=s-i-1; top=i; } } } int ans=0; for(int i=1;i<=n;i++) if(a[i]=='#') ans=max(ans,dp[i]+1>>1<<1); else ans=max(ans,(dp[i]>>1<<1)+1); printf("Case %d: %d\n",++tt,ans); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator