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,难度为中位黄,对标提高组第一题