[ Letter Song - 初音Miku (Author: dokiyo) ]

机房挂上了高级电子牌子,说是离 NOIp 还有 49 天。

挺红挺亮的,也很扎眼,一抬头就看得见,和自己算的日子差不多,但是想一想,还是比自己感觉到的还更近一些。

搞得自己越来越虚。

越临近考试反而状态越差了的感觉,考试也是随随便便就被别人吊打,做不动题也打不起精神。

很难想象这样的自己要是真的没拿到奖会变成什么样子,几个星期前信誓旦旦要拿一等奖的热血倒是已经凉了一半了。

看着两年多前办的一中饭卡,卡面已经昏黄布满一些细碎的划痕,还有两年多前贴上的卡贴,有种怅然若失的感觉呢。

背离过,也尝试寻找过拾起过,所谓初心的东西。

就顺手整理一些还不太会的模板以便复习吧,有些也比较远古了,可能比较丑,不过应该不影响食用……如果以后写相关的博客,大概也会在这里挂一下的。

 

1. KMP算法

 1 #include <cstdio> 
 2 #include <cctype> 
 3 #include <cstring> 
 4 #include <algorithm> 
 5 using namespace std; 
 6 
 7 const int maxl = 1000000 + 10; 
 8 char a[maxl], b[maxl]; 
 9 int ans[maxl], nxt[maxl], lena, lenb; 
10 
11 int main(int argc, char const *argv[]) 
12 { 
13   scanf("%s%s", a, b); 
14   lena = strlen(a), lenb = strlen(b); 
15   int t = 0;  nxt[0] = 0;
16   for(int i = 1; i < lenb; ++i) {
17     while( t && b[i] != b[t] ) t = nxt[t - 1];
18     if( b[i] == b[t] ) ++t;  nxt[i] = t;
19   }
20   int k = 0;  t = 0;
21   for(int i = 0; i < lena; ++i) {
22     while( t && a[i] != b[t] )  t = nxt[t - 1];
23     if( a[i] == b[t] )  ++t;
24     if( t == lenb )  ans[++k] = i - lenb + 2;
25   }
26   for(int i = 1; i <= k; ++i) printf("%d\n", ans[i]);
27   for(int i = 0; i < lenb; ++i) printf("%d ", nxt[i]);
28   return 0;
29 }
2018.06.27

相关文章: