转裁自我的洛谷博客: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;
}
标签:CF1721A,字母,int,题解,sum,++,st,相同,Image
From: https://www.cnblogs.com/UshioNoa/p/Code-of-CF1721A-Image.html