一、题目
二、分析
列表找规律,不同长度的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;
}