Pentium.Labs

System全家桶:https://zhuanlan.zhihu.com/c_1238468913098731520

导航

140725模拟赛总结


A:hdu4847    字符串匹配
第一想法是KMP,写了好长时间结果还TLE了-_-||,实际上用个简单的枚举判断就能解决。因为待验证的字符串"doge"很小。
写A题的时候还被输入卡了半天。
Tips1:输入至文件结尾(eof)的常用方法:
      while (cin>>a)        //最常用的
      while (cin.getline(s,30))    //按行读入前30个字符。空格也读入
      getline(cin,s)        //和getline相似,
Reference:http://www.cnblogs.com/flatfoosie/archive/2010/12/22/1914055.html
Tips2:自己的KMP还是两年前用Pascal写的......
找了个KMP模版,以后用就行:
Reference:http://www.cnblogs.com/183zyz/archive/2011/03/24/1994380.html

 1 # include<stdio.h>
 2 # include<string.h>
 3  char P[10005],T[1000005];
 4  int next[10005],n,m;
 5 void Pnex()
 6 {    
 7     int k,q;    
 8     next[1]=0;   
 9     k=0;   
10     for(q=2;q<=n;q++)  
11     {       
12         while(k>0 && P[k+1]!=P[q])   
13         {          
14             k=next[k];    
15         }      
16         if(P[k+1]==P[q]) k++; 
17         next[q]=k;   
18     }
19 }
20 int main()
21 {    
22     int i,t,q,num;  
23     scanf("%d",&t);    
24     getchar();     
25     while(t--)     
26     {           
27         gets(P);    
28         gets(T);      
29         n=strlen(P);     
30         m=strlen(T);    
31         for(i=n-1;i>=0;i--)  
32             P[i+1]=P[i];    
33         for(i=m-1;i>=0;i--)     
34             T[i+1]=T[i];          
35         Pnex();    
36         q=0;     
37         num=0;    
38         for(i=1;i<=m;i++) 
39         {            
40             while(q>0 && P[q+1]!=T[i])  
41             {              
42                 q=next[q];     
43             }            
44             if(P[q+1]==T[i]) q++; 
45             if(q==n)      
46             {            
47                 num++;       
48                 q=next[q];    
49             }      
50         }          
51         printf("%d\n",num);   
52     }   
53     return 0;
54 }
View Code

 


Tips3:补充一个更快的字符串匹配算法:Boyer-Moore算法
Reference:http://www.ruanyifeng.com/blog/2013/05/boyer-moore_string_search_algorithm.html

Tips4:补充李大神发的一个神图:


B:hdu4848    搜索+强剪枝
题目大意:图上每个点都有各自的deadline,需要在deadline之前遍历完所有的点。求最少时间
Reference:http://www.tuicool.com/articles/vERnuqZ

C:hdu4849    AC    裸的最短路
D:hdu4850
先留着点,本周一定要写!


posted on 2014-07-25 20:12  Pentium.Labs  阅读(275)  评论(0编辑  收藏  举报



Pentium.Lab Since 1998