码迷,mamicode.com
首页 > 其他好文 > 详细

hdu3294Finding Palindromes

时间:2017-03-25 00:02:50      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:==   std   while   ace   iostream   lin   name   void   ref   

题目链接:http://poj.org/problem?id=3376

未解决!!!

下面代码明显会TLE-_-||

新的方法还不理解以后再看。

 1 #include<cstdio>
 2 #include<string>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 const int maxn=2001000;
 7 string s[maxn];
 8 string t;
 9 int r[2000010];
10 int ans;
11 void manacher(string s)
12 {
13 
14     int id=0,m=0;
15     int len=s.length();
16     for(int i=len;i>=0;i--)
17     {
18         s[i*2+2]=s[i];
19         s[i*2+1]=#;
20     }
21     s[0]=*;
22     for(int i=2;i<len*2+1;i++)
23     {
24         if(id+r[id]>i) r[i]=min(r[id*2-i],r[id]+id-i);
25         else r[i]=1;
26         while(s[i-r[i]]==s[i+r[i]]) r[i]++;
27         if(id+r[id]<i+r[i]) id=i;
28         if(m<r[id]) m=r[id];
29         if(m==len+1) {ans++;return ;}
30     }
31     return ;
32 }
33 int main()
34 {
35     int n;
36     //while(scanf("%d",&n)!=EOF)
37     scanf("%d",&n);
38     {
39         ans=0;
40         int x;
41         for(int i=0;i<n;i++){
42                 scanf("%d",&x);
43             cin>>s[i];
44         }
45         //二重循环,tle
46         for(int i=0;i<n;i++)
47             for(int j=0;j<n;j++)
48             {
49                 t="";
50                 t=s[i]+s[j];
51                 manacher(t);
52             }
53         printf("%d\n",ans);
54     }
55 }

 

hdu3294Finding Palindromes

标签:==   std   while   ace   iostream   lin   name   void   ref   

原文地址:http://www.cnblogs.com/yijiull/p/6614012.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!