学习心得(code)

superlong@CoreCoder

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  74 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks

公告

文字可能放在http://blog.csdn.net/superlong100,此处存放代码

常用链接

留言簿(4)

我参与的团队

搜索

  •  

最新随笔

最新评论

  • 1. re: Poj 1279
  • 对于一个凹多边形用叉积计算面积 后能根据结果的正负来判断给的点集的时针方向?
  • --bsshanghai
  • 2. re: Poj 3691
  • 你写的这个get_fail() 好像并是真正的get_fail,也是说fail指向的串并不是当前结点的子串。为什么要这样弄呢?
  • --acmer1183
  • 3. re: HDU2295[未登录]
  • 这个是IDA* 也就是迭代加深@ylfdrib
  • --superlong
  • 4. re: HDU2295
  • 评论内容较长,点击标题查看
  • --ylfdrib
  • 5. re: HOJ 11482
  • 呵呵..把代码发在这里很不错..以后我也试试...百度的编辑器太烂了....
  • --csuft1

阅读排行榜

评论排行榜

#include <iostream>
#include 
<cstring>

#define MAXN 100001

using namespace std;

int  result[MAXN], cnt;
char s[MAXN];

int main()
{
    
while(gets(s))
     {
        cnt 
= 0;
        memset(result , 
0 , sizeof(result));
         
int l = 0, r = 0;
         
int k, len = strlen(s), si, zk;
         printf(
"%d\n",len);
         
for(k = l; k < len; k ++)
         {
            cnt 
++;
             
if( k > r )
            {
                    zk 
= 0;
                    
for(si = 0; si < len; si ++)
                    {
                        cnt 
++;
                        
if( k + si < len && s[si] == s[k + si]) continue;
                        
else break;
                    }
                    
if( si > 0 )
                    {
                        zk 
= si;
                        r 
= zk + k - 1;
                        l 
= k;
                    }
            }
            
else
            {
                
int kold = k - 1, zold = result[kold];
                
int b = r - k + 1;
                
if(zold < b) zk = zold;
                
else        
                {
                    zk 
= b;
                    
for(si = b - 1; si < len; si ++)
                    {
                        cnt 
++;
                        
if(k + si < len && s[si] == s[k + si]) continue;
                        
else break;
                    }
                    zk 
= si;
                    r 
= zk + k - 1;
                    l 
= k;
                }       
            }
            result[k] 
= zk;
        }
        printf(
"%d\n",cnt);
        
for(int i = 1; i < len; i ++) printf("%d %d \n",i,result[i]);
    }
}



posted on 2009-08-05 11:09 superlong 阅读(169) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理