题目链接: Constanze’s Machine
大致题意:
给你一个字符串,其中两个u 可以变成w,两个n可以变成m,可以不变
问有多少种可能的字符串
解题思路:
如果出现m或者w直接输出0
n 1
nn 2
nnn 3
nnnn 5
nnnnn 8
发现是斐波那契数列
f[i]=f[i-1]+f[i-2]
f[i-1]表示直接把i位上的n 当成独立的不考虑合并
f[i-2]表示直接把i-1位上的n和i位上的n和并
AC代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10;
const int mod = 1e9 + 7;
ll f[N];
int main() {
string s; cin >> s;
int n = s.length();
f[0] = f[1] = 1;
if (s[0] == 'w' || s[0] == 'm'){
cout << 0 << endl;
return 0;
}
for (int i = 1; i < n; ++i) {
if (s[i] == s[i - 1] && (s[i] == 'u' || s[i] == 'n'))
f[i + 1] = (f[i] + f[i - 1]) % mod;
else f[i + 1] = f[i];
if (s[i] == 'w' || s[i] == 'm') {
cout << 0 << endl;
return 0;
}
}
cout << f[n] << endl;
return 0;
}