Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2)
A. Prison Break
题意:给出 n×m 的矩阵,每个点表示一个囚犯,移动一次时间为1,可同时移动,每个点上可以同时有多个囚犯,求让所有点移动到 (r,c) 点的最短的时间。
思路:输出 (1,1)、(1,m)、(n,1)、(n,m) 四个点到 (r,c) 的最小距离的最大值。
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
int main() {
int T;
cin >> T;
while (T--) {
ll n, m, r, c;
cin >> n >> m >> r >> c;
cout << max(abs(1 - r) + abs(1 - c),
max(abs(1 - r) + abs(m - c),
max(abs(n - r) + abs(1 - c), abs(n - r) + abs(m - c)))) << endl;
}
return 0;
}
B. Repainting Street
题意:有1到n的序列,每次可以把长度为k的任意区间里的所有数修改为同一个数,每次改成的数可以不一样,问使得n个数都相同的最小修改次数。
思路:暴力。先记下序列中有那些数,每次全部修改为这个数,从前往后遍历数组,遇到不是这个数的就往后跳k长度,代表这个长度为k的区间被修改。
#include <iostream>
#include <algorithm>