zoukankan      html  css  js  c++  java
  • hdu3068马拉车

    其实马拉车还真是最好理解的算法(感觉初中的时候好像讲过类似的,但是当时就没有认真听)

    没想到一个简单的优化能变成O(n),感觉碉堡

    不说了,马拉车裸题,我在写的时候只保留了id,没保留mx,希望能形成一种代码习惯吧

     1 #include <cstdio>
     2 int n;char ch;
     3 int p[220002];
     4 char a[220002];
     5 int min(int a,int b){return(a<b)?a:b;}
     6 int max(int a,int b){return(a>b)?a:b;}
     7 int get(int k){return (k&1)?p[k]/2*2:(p[k]+1)/2*2-1;}
     8 void add(int i)
     9 {
    10     int u=i-p[i],v=i+p[i];
    11     while((a[u]==a[v]) && (u>0) && (v<=n))
    12         u--,v++,p[i]++;    
    13 }
    14 int main()
    15 {
    16     while((ch<'a' || ch>'z')&&(ch!=EOF)) ch=getchar();
    17     while(ch!=EOF)
    18     {
    19         n=1;a[1]='0';
    20         for(;ch>='a' && ch<='z';ch=getchar())
    21             a[++n]=ch,a[++n]='0';
    22         int id=0;
    23         for(int i=1;i<=n;i++)
    24         {
    25             if(i<id+p[id])
    26             {
    27                 p[i]=min(p[id*2-i],id+p[id]-i);
    28                 if(i+p[i]==id+p[id])
    29                     add(i);
    30             }
    31             else
    32                 p[i]=1,add(i);
    33             if(i+p[i]>p[id]+id)
    34                 id=i;
    35         }
    36         int ans=0;
    37         for(int i=1;i<=n;i++)
    38             ans=max(ans,get(i));
    39         printf("%d
    ",ans);
    40         while((ch<'a' || ch>'z')&&(ch!=EOF)) ch=getchar();
    41     }
    42     return 0;
    43 }
  • 相关阅读:
    log4j输出信息到mongodb
    mongodb日志服务器方案
    mongodb的高级操作(聚合框架)
    mongdb高级操作(group by )
    mongodb的优化
    mongodb集成spring
    mongodb的固定集合(优化效率)
    mongodb的查询操作符
    mongoDB中的连接池(转载)
    mongodb在java驱动包下的操作(转)
  • 原文地址:https://www.cnblogs.com/wanglichao/p/5798856.html
Copyright © 2011-2022 走看看