AtCoder Beginner Contest 370-C~D题解

AtCoder Beginner Contest 370-C题解

思路

整体来说,一眼是一个贪心,具体来说先把让字典序变小的字符变化,让后再让字典序变大的字符变化

代码

#include <bits/stdc++.h>
using namespace std;
char s[105],t[105];
int a[105],sum;
int main()
{
	scanf("%s", s);
	scanf("%s", t);
	int st=strlen(s);
	for (int i=0; i<st; i++)
	{
		if (s[i]!=t[i])
		{
			sum++;
		}
	}
	cout << sum<<endl;
	for (int i=0; i<st; i++)
	{
		a[i]=t[i]-s[i];
	}
	for (int i=0; i<st;i++)
	{
		if (a[i]<0)
		{
			a[i]=0;
			s[i]=t[i];
			for (int j=0; j<st; j++)
			{
				cout << s[j];
			}
			cout << endl;
		}
	}
	for (int i=st-1; i>=0; i--)
	{
		if (a[i]>0)
		{
			a[i]=0;
			s[i]=t[i];
			for (int j=0; j<st; j++)
			{
				cout << s[j];
			}
			cout << endl;
		}
	}
}

后记

感觉也超水,只配当T2,总体难度为下位橙,对标GESP2~3级最后一两题

AtCoder Beginner Contest 370-D题解

前言

总体就是个暴力加上些许优化

注:本题解采用了官方题解来完善思路

思路

我们最初可以使用两个set数组来存储(实际上完全没必要,只是画蛇添足罢了),具体来说是

  • q:一个数组,但是他的每一个元素是一个set类型,存储第i行的剩余墙壁的列信息
  • x:同q数组,只不过是存储第j列的信息

但是对于每次查找都要看第一个墙壁在哪里,所以说我们可以用二分或并查集来优化

后记

总体来说很水,只用一些优化就可以搞定,感觉在平时只配T3,难度为中位黄,对标提高组第一题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值