#P3660. 第2题-字母染色
-
ID: 3003
Tried: 27
Accepted: 11
Difficulty: 1
所属公司 :
中国电信
时间 :25年9月13日场
-
算法标签>枚举
第2题-字母染色
题解
思路
-
只有 3 个不同字母,所有排列共 6 种。直接枚举这 6 种字符串,对应到目标 RGB 的最少交换次数如下:
- RGB⇒0
- RBG⇒1
- GRB⇒1
- GBR⇒2
- BRG⇒2
- BGR⇒1
-
实现时先读取输入并过滤空格,得到只含 R/G/B 的长度为 3 的字符串,然后按上表返回答案。
-
复杂度:时间 O(1),空间 O(1)。
C++
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string line, s;
// 读取整行输入,过滤出 R/G/B 三个字母(输入可能包含空格)
if (!getline(cin, line)) return 0;
for (char c : line) {
if (c == 'R' || c == 'G' || c == 'B') s.push_back(c);
}
int ans = 0;
// 枚举六种情况并给出最少交换次数
if (s == "RGB") ans = 0;
else if (s == "RBG") ans = 1;
else if (s == "GRB") ans = 1;
else if (s == "GBR") ans = 2;
else if (s == "BRG") ans = 2;
else if (s == "BGR") ans = 1;
cout << ans << "\n";
return 0;
}
Python
import sys
def main():
line = sys.stdin.readline()
# 过滤出 R/G/B 三个字母(可能包含空格)
s = ''.join([c for c in line if c in 'RGB'])
# 枚举六种情况并给出最少交换次数
if s == 'RGB':
print(0)
elif s == 'RBG':
print(1)
elif s == 'GRB':
print(1)
elif s == 'GBR':
print(2)
elif s == 'BRG':
print(2)
elif s == 'BGR':
print(1)
if __name__ == "__main__":
main()
Java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
// 过滤出 R/G/B 三个字母(输入可能包含空格)
StringBuilder sb = new StringBuilder(3);
for (int i = 0; i < line.length(); i++) {
char c = line.charAt(i);
if (c == 'R' || c == 'G' || c == 'B') sb.append(c);
}
String s = sb.toString();
int ans;
// 枚举六种情况并给出最少交换次数
switch (s) {
case "RGB": ans = 0; break;
case "RBG": ans = 1; break;
case "GRB": ans = 1; break;
case "GBR": ans = 2; break;
case "BRG": ans = 2; break;
case "BGR": ans = 1; break;
default: ans = 0; // 题意保证覆盖六种情况
}
System.out.println(ans);
}
}
题目内容
小红有三个不同的字母,分别为 ′R′(RED)、′G′(GREEN)、′B′(BLUE) ,但顺序被打乱了。她希望通过交换任意两个字母的位置,将序列恢复为 ′R’、′G′、′B′ 的顺序。请问最少需要多少次交换?
输入描述
在一行上输入三个字母,这三个字母恰好是 ′R′,′G′,′B′ 各一个。
输出描述
输出一个整数,表示最少需要多少次交换。
样例1
输入
R G B
输出
0
样例2
输入
R B G
输出
1