zoukankan      html  css  js  c++  java
  • poj3376Finding Palindromes

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

    update:已解决here


    未解决!!!

    下面代码明显会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
    ",ans);
    54     }
    55 }
  • 相关阅读:
    POJ2524+并查集
    POJ3697+BFS+hash存边
    POJ1151+线段树+扫描线
    POJ2528+线段树
    ubuntu 和 win7 远程登陆 + vnc登陆
    POJ3690+位运算
    POJ3283+字典树
    POJ3282+模拟
    POJ2349+prim
    2016.6.13
  • 原文地址:https://www.cnblogs.com/yijiull/p/6614012.html
Copyright © 2011-2022 走看看