一、题目
二、分析
列表找规律,不同长度的u能够带来多少种不同的情况
发现规律,case满足斐波那契数列。
所以可以先预计算斐波那契数列fib。
#include<iostream>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int mod=1e9+7;
const int MAXN=1e5+6;
int ans=1;
int fib[MAXN];
signed main()
{
fib[1]=1,fib[2]=2;
for(int i=3;i<MAXN;i++) fib[i]=(fib[i-1]+fib[i-2])%mod;
// 注意这里也要取模
string s;cin>>s;
if(count(s.begin(),s.end(),'w')!=0||count(s.begin(),s.end(),'m')!=0){
cout<<0<<endl;return 0;
}
for(int i=0;i<s.length();i++)
{
if(s[i]=='u'||s[i]=='n'){
int j;
for(j=i+1;j<s.length();j++) if(s[j]!=s[j-1]) break;
int dist=j-i;
ans=(ans*fib[dist])%mod;
i=j-1;//注意i要在j的前一位开始
}
}
cout<<ans<<endl;
}