Educational Codeforces Round 123 E

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);
}
posted @ 2022-09-02 19:59  ycllz  阅读(27)  评论(0)    收藏  举报