NC14272. Fantasy Strange Tree
描述
输入描述
第一行一个由‘L’‘R’两种字符构成的串。
第二行一个由‘U’‘L’‘R’三种字符构成的串。
串长度≤105
输出描述
输出一行,为答案mod(109+7)。
示例1
输入:
LL RU
输出:
3
说明:
FST可以操作的串为‘’‘R’‘U’‘RU’。C++(clang++ 11.0.1) 解法, 执行用时: 8ms, 内存消耗: 740K, 提交时间: 2023-03-08 23:26:18
#include <bits/stdc++.h> using namespace std; const int N = 1e6 + 10, mod = 1e9 + 7; typedef long long LL; #define eps 1e-7 string s, t; void solve() { cin >> t >> s; int ts = t.size(); LL l = 1, r = 1; LL ans = 1; for(auto x : s) { if(x == 'L') { ans = (ans + l) % mod; r = (r + l) % mod; } else if(x == 'R') { ans = (ans + r) % mod; l = (l + r) % mod; } else if(x == 'U') { if(ts) { ts --; ans = (ans + 1) % mod; if(t[ts] == 'R') l = (l + 1) % mod; else r = (r + 1) % mod; } } } cout << ans << '\n'; } int main() { //ios::sync_with_stdio(false), cin.tie(0), cout.tie(0); int T = 1; //cin >> T; while(T -- ) { solve(); } return 0; }
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 504K, 提交时间: 2020-07-01 21:59:09
#include<bits/stdc++.h> #define Fox ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); using namespace std; const int N=1e5+10; const int mod=1e9+7; char s[N],t[N],c; int n,m,ans,dp[4]; int main(){ Fox; cin>>(s+1)>>(t+1); n=strlen(t+1); m=strlen(s+1); dp[0]=1; for(int i=1;i<=n;i++){ if(t[i]=='U'){ if(m){ c=s[m--]; if(c=='L')dp[1]++; else dp[2]++; } continue; } if(t[i]=='L'){ dp[1]=(dp[1]+dp[0])%mod; dp[3]=(dp[3]+dp[2])%mod; dp[0]=(dp[0]+dp[2])%mod; dp[2]=0; } else{ dp[2]=(dp[2]+dp[0])%mod; dp[3]=(dp[3]+dp[1])%mod; dp[0]=(dp[0]+dp[1])%mod; dp[1]=0; } } for(int i=0;i<4;i++)ans=(ans+dp[i])%mod; cout<<ans; return 0; }