CF1721A Image

题链:cf luogu

作为 A 题名副其实。

Description

给你一个由小写字母组成的 \(2\times2\) 矩阵,每次可以把不超过两个相同的字母变成任意其他字母,问最少几步能把 \(2\times2\) 矩阵中的所有字母变成一样的。

Analysis

这题其实没什么好说的:答案只可能为 \(0\)\(1\)\(2\)\(3\)

  1. ans = 0:原图就是 \(4\) 个字母一样,不动即可;
  2. ans = 1:原图每种字母的个数为 \(2\)\(2\)\(3\)\(1\)
  3. ans = 2:原图每种字母的个数为 \(2\)\(1\)\(1\)
  4. 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.

(拇指点点

posted @ 2022-08-29 09:15  Dry_ice  阅读(37)  评论(0)    收藏  举报