E. Expand the Path ----Educational Codeforces Round 123 (Rated for Div. 2)

观察样例我们不难发现,关键点在于未偏移的时候的最右下角的坐标(若其触边界),如右边界,则无法整体右移,其他同理,接着分析如何计算覆盖的点,举个例子:当初始操作为D时,

当还未遇到R之前,不适合进行偏移,那么就会有部分空白面积,

当遇到R之后,可以计算第一个R之后右移动了多少记为cx,下移动了多少记为cy,留白面积就是cx*cy 可以自己造个样例去看看 我可以给个(6,DDDRRD),画个图就可以理解了。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
const int N=200005;
int t,n;
char s[N];
signed main(){
	scanf("%lld",&t);
	while(t--){
		scanf("%lld%s",&n,s);
		int k=1,ans=0,cx=0,cy=0;
		while(k<strlen(s)&&s[k]==s[k-1])k++;
		if(k==strlen(s)){
			printf("%lld\n",n);
			continue;
		}
		for(int i=k;i<strlen(s);i++){
			if(s[i]=='R')cy++;
			else cx++;
		}
		ans+=k*(n-1);
		ans+=cx*cy;
		printf("%lld\n",n*n-ans);
	}
	return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值