题目链接:https://vjudge.net/problem/Gym-101205D
题意:给你一个字符串递推式(也就是Fibonacci数列),每次输入一个n和一个字符串,问你字符串在f[n]这一项里出现了多少次
解析:首先数据规模很大所以存是存不下的,写了几个数列发现,出现的次数也是一个类似递推式的东西,不过当f[i-1]和f[i-2]拼接起来的时候有可能产生新的可匹配的串,于是分成两部分计数,假设输出的字符串长度为len,那么我们存递推字符串的时候可以存f[i-1]的前len-1项后len-1项,f[i-2]的前len-1项后len-1项,然后再做一次kmp,一只递推到第n项就是答案了,用string写还是(W)很(A)悠(成)闲(傻)的(逼)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <iostream>
#include <set>
#include <map>
#include <queue>
using namespace std;
const int maxn = 2e5+100;
<