Codeforces Round #753 (Div. 3)

在这里插入图片描述
虚拟参赛的,其实五道题都该赛时过的,可是 E E E 题,太毒瘤了,坐标弄错了。
题目链接

A题

  • 思路
    简单的模拟题,HASH一下
  • 代码
void solve()
{
    map<char,int> mp;
	string s;cin>>s;
	for (int i = 0; i < s.size();i ++) {
		mp[s[i]] = i + 1;
	}
	cin>>s;
	int ans = 0;
	for (int i = 1;i < s.size();i ++) {
		ans += abs(mp[s[i]] - mp[s[i-1]]);
	}
	cout<<ans<<endl;
}

B题

  • 思路
    每四个就会回到原来位置,所以见下。
    无论 x 0 x_0 x0 是奇数还是偶数。
  • 代码
void solve()
{
    ll x0,n;cin>>x0>>n;
	ll md = n % 4;
	if (x0 % 2) {
		for (ll i = n - md + 1;i <= n;i ++){
			x0 += -a[i - (n-md)] * i;
		}
	}
	else {
		for (ll i = n - md + 1;i <= n;i ++){
			x0 += a[i - (n-md)] * i;
		}
	}
	cout<< x0 <<endl;
}

C题

  • 思路
    模拟
  • 代码
void solve()
{
    int n; cin>>n;
	for (int i = 1;i <= n;i ++) cin>>a[i];
	sort(a+1,a+1+n);
	ll ans = a[1];
	ll sum = 0;
	for (int i = 1;i < n;i ++) {
		// ans -= a[i];
		sum += a[i];
		a[i+1] -= sum;
		ans = max(ans,a[i+1]);
	}
	cout<<ans<<endl;
}

D题

  • 思路
    尽量让 r e d red red 在前面,然后排序,看是否可以。
    因为 r e d red red 可以无限加,无论原来的数字多小; b l u e blue blue 可以无限减,无论原来的数字多大。
  • 代码

void solve()
{
    int n; cin>>n;
	for (int i = 1;i <= n;i ++) cin>>a[i].first;
	for (int i = 1;i <= n;i ++) cin>>a[i].second;
	sort(a+1,a+1+n,cmp);
	// for (int i = 1;i <= n;i ++){
	// 	cout<<a[i].second<<" "<<a[i].first<<endl;
	// }
	for (int i = 1;i <= n;i ++) {
		if ((a[i].first < i && a[i].second == 'B')||(a[i].first > i &&a[i].second == 'R')) {
			cout<<"NO"<<endl;return;
		} 
	}
	cout<<"YES"<<endl;
}

E题

  • 思路
    其实没啥技术含量,就是模拟,然后细节比较多吧算是这题。不过毒瘤的是对于我来说,没有看到 c c c 坐标是从高到低的,导致我一直怀疑样例是错的。
  • 代码
void solve()
{
    int n,m;cin>>n>>m;
	string s;cin>>s;
	int cf = 0,cz = 0,rf = 0,rz = 0;
	int c = 0,r = 0;//row - L,R;col-U,D
	for (int i = 0;i < s.size();i ++) {
		if (s[i] == 'L') {
			r --;
		} else if (s[i] == 'R') {
			r ++;
		} else if (s[i] == 'U') {
			c --;
		} else {
			c ++;
		}
		int trz = rz,trf = rf,tcf = cf,tcz = cz;
		rz = max(rz,r);
		rf = min(rf,r);
		cz = max(cz,c);
		cf = min(cf,c);
		if ((abs(rz) + abs(rf) >= m) || (abs(cz) + abs(cf)) >= n){
			cout<<(abs(tcf)+1)<<" "<<(abs(trf)+1)<<endl;
			return;
		}
	}
	// cout<<rz<<" "<<rf<<" "<<cz<<" "<<cf<<endl;
	cout<<(abs(cf)+1)<<" "<<(abs(rf)+1)<<endl;
			
}

注:后面的题就先不补了,直接到 2300 分 2300分 2300

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的码泰君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值