-
- 给出1个字符串,由8各方向组成,问按照字符串从左到右的顺序,能有几种不同的走法。
- 思路: 找出 NE ,NW,SE,SW,的数目分合两种状态。2^ans次方
-
#include<bits/stdc++.h> using namespace std; #define maxn 100000 int main() { string s; int ans=0; cin>>s; int len=s.size(); for(int i=0; i<len-1; i++) { if(s[i]=='N'&&(s[i+1]=='W'||s[i+1]=='E')) { ans++; i++; continue; } if(s[i]=='S'&&(s[i+1]=='W'||s[i+1]=='E')) { ans++; i++; } } int sum=1; for(int i=0;i<ans;i++) { sum*=2; sum%=1000000007; } cout<<sum<<endl; return 0; }
-
小DP,显然要想形成不同的路径,只有在串中出现 NE,SE,NW,SW时才会发生。
而每当出现这些子串时(以NE为例),我们有两种选择
1.继承 NE 串前面的状态,将NE看成一步。
2.继承 E 前面的状态,将 N E看成两步。
这两种选择都要加入DP计算
-
#include <iostream> #include <cstring> #include <cstdio> #define mod 1000000007 using namespace std; int main() { char str[100005]; int ans[100005],len; while(cin>>str) { ans[0]=ans[1]=1; len=strlen(str); for(int i=1;i<len;i++) { if((str[i]=='E'||str[i]=='W')&&(str[i-1]=='N'||str[i-1]=='S')) ans[i+1]=(ans[i-1]+ans[i])%mod; else ans[i+1]=ans[i]; } cout<<ans[len]<<endl; } return 0; }
D - Weather Station -子串合并种类
最新推荐文章于 2024-09-08 10:37:16 发布