CF1721A Image题解

发布时间 2023-11-05 08:37:51作者: Ushio_Noa

转裁自我的洛谷博客:https://www.luogu.com.cn/blog/653832/Code-of-CF1721A-Image

题意简述

给你一个2×2的矩阵,每次可以将一个或两个字母变成任意的其他字母,问最少用几步能将矩阵中的字母变成一样的。

思路

可以先分类讨论可能会出现的情况(如下表)。根据1,2,3 列可得出暴力做法,即逐个判断是下列哪种情况并输出。再根据第4列可得出优化即不同字母数 sum-1的公式。

字母相同的情况 最少步数 分析 不同字母数
四个字母都相同 0 不需要改变即为最优解 1
三个字母相同 1 改变不同的那个字母即可 2
两个字母相同,另外两个字母也相同 1 任意改变两个相同的字母 2
两个字母相同,另外两个字母不同 2 分步改变两个字母 3
四个字母都不相同 3 分步改变三个字母 4

Code

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	char a,b,c,d;
	cin>>t;
	int st[26];
	while(t--)
	{
		memset(st,0,sizeof(st));//初始化
		cin>>a>>b>>c>>d;
		int sum=0;//sum是不同字母数
		if(st[a-'a']==0)st[a-'a']=1,sum++;
		if(st[b-'a']==0)st[b-'a']=1,sum++;
		if(st[c-'a']==0)st[c-'a']=1,sum++;
		if(st[d-'a']==0)st[d-'a']=1,sum++;
		cout<<sum-1<<endl;
	}
	return 0;
}