E. Expand the Path
我们画出一个合法的一般性的来研究 比如RDRDR
我们可以将其任意一个往下 往右延长 但是这个图形获得的面积是不规则的 但是我们知道 合法的序列肯定是只能往下往右的 我们的线移动的距离一定 那么获得的面积也肯定是个矩形 从而移动一下即可 我们只需要记录拐角点在哪即可
注意要加上本来的长度 拐角点还要再加上前一个点
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+20;
const int M = 998244353;
const int mod = 998244353;
#define int long long
#define endl '\n'
#define Endl '\n'
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define inf 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
void solve() {
int n;cin>>n;
string s;cin>>s;
int dd=1,rr=1,d=0,r=0,flagd=0,flagr=0;
for(auto c:s){
if(c=='D')dd++,flagd=1;
else rr++,flagr=1;
if(c=='D'&&flagr)d++;
if(c=='R'&&flagd)r++;
}
int ans=s.size()+1;
if(flagd)ans+=(r+1)*(n-dd);
if(flagr)ans+=(d+1)*(n-rr);
if(flagd&&flagr)ans+=(n-rr)*(n-dd);
cout<<ans<<endl;
}
signed main(){
fast
int T;cin>>T;
while(T--) {
solve();
}
return ~~(0^_^0);
}
标签:Educational,flagd,rr,int,Codeforces,123,flagr,ans,define
From: https://www.cnblogs.com/ycllz/p/16651088.html