CF1721A Image
作为 A 题名副其实。
Description
给你一个由小写字母组成的 \(2\times2\) 矩阵,每次可以把不超过两个相同的字母变成任意其他字母,问最少几步能把 \(2\times2\) 矩阵中的所有字母变成一样的。
Analysis
这题其实没什么好说的:答案只可能为 \(0\)、\(1\)、\(2\) 或 \(3\)。
ans = 0:原图就是 \(4\) 个字母一样,不动即可;ans = 1:原图每种字母的个数为 \(2\) 和 \(2\) 或 \(3\) 和 \(1\);ans = 2:原图每种字母的个数为 \(2\)、\(1\) 和 \(1\);ans = 3:原图每种字母的个数都为一个,即有四个字母都不同。
综上所述,有两种做法:你可以按照枚举分类讨论输出,也可以找到规律:统计不同字母的个数 \(res\),最终的答案即为 \(res - 1\)。
Code
看很多dalao用 set 集合的不可重复性来去重,最后直接输出 st.size() - 1 即可。笔者这里给出朴素的桶写法。
#include <stdio.h>
int main(void) {
int t; for (scanf("%d", &t); t--; ) {
int t[30] = {0}, res = 0; char s[5];
for (int i = 1; i <= 2; ++i) {
scanf("%s", s + 1); //行行读入,在线处理
for (int j = 1; j <= 2; ++j)
if (!t[s[j] - 'a']) ++res, t[s[j] - 'a'] = 1; //统计不同字母数
}
printf("%d\n", res - 1);
}
return 0;
}
The end. Thanks.
(拇指点点

浙公网安备 33010602011771号