[ 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 }