[USACO22JAN] Herdle B 题解 - 数组

474 0
目录

字符串是usaco铜组中的一个考点,难度不高,适合新手入门。

现在我们来看一道洛谷上评为入门难度的题目。

[USACO22JAN] Herdle B

题目描述

奶牛们发明了一种名为 Herdle 的新型解谜游戏,在牛界引起了轰动。

每天都会有一个新谜题发布供奶牛解决。游戏采用 3×3 方阵的形式表示农场的一块田地,田地的每个方格都由特定品种的奶牛占据。总共只有 26 种可能的品种,每一种由 A 到 Z 中的不同大写字母标识。玩家不会被告知田地中的奶牛品种排列方式——游戏目标是通过一系列猜测确定它们。

每次猜测,奶牛们输入一个 3×3 的大写字母方阵,表示该田地可以用奶牛填充的可能方式。猜测的某些方格可能是正确的。这些方格以绿色高亮显示,让奶牛们知道这些是正确的。猜测的另一些方格可能填入了品种正确但位置错误的奶牛。这些以黄色高亮显示。

黄色高亮显示的方格的数量可以帮助指示某个品种的奶牛数量。 例如,假设猜测方阵包含 4 头品种 A 的奶牛,而答案方阵包含 2 只品种 A 的奶牛,其中没有正确位置上的 A(即,它们都不应该是绿色的)。 在这种情况下,猜测方阵中只有两个 A 应以黄色高亮显示。 更准确地说,如果猜测方阵中有 x 个特定品种的奶牛,并且 答案方阵中有 y ≤ x 头该品种奶牛(不包括位置正确而得到绿色高亮显示的奶牛),那么猜测方阵的 x 头奶牛中只有 y 头奶牛应该以黄色高亮显示。

给定正确答案的方阵和一个表示对该答案的猜测的方阵,请计算绿色和黄色高亮显示的方格的数量。

输入格式

输入的前 3 行给定了正确答案的方阵。以下 3 行表示对该答案的猜测。

输出格式

输出两行。输出的第一行包含应当以绿色高亮显示的方格的数量。输出的第二行包含应当以黄色高亮显示的方格的数量。

样例 #1

样例输入 #1

COW
SAY
MOO
WIN
THE
IOI

样例输出 #1

1
1

样例 #2

样例输入 #2

AAA
BBB
CCC
AYY
AAA
ZZZ 

样例输出 #2

1
2

提示

样例解释 1:

在这个例子中,最后一行中间的 O 是正确的,所以这个方格以绿色高亮显示。字母 W 位于错误的位置,所以它以黄色高亮显示。

样例解释 2:

在这里,其中一个 A 位于正确的位置,所以它以绿色高亮显示。余下的 A 均不在正确位置上,由于答案方阵中有两个 A,所以有两个 A 应当以黄色高亮显示。


题解

本题难度不高,主要考察同学们对题目的理解以及数组的基本处理。

首先用两个字符数组记录,并用映射对每一种字符的数量进行记录。

我们可以首先用循环计算绿色的数量,即查看同一位置上字符是否相等。

最后若同一位置字符不相等,则查看是否有足够的正确字符,以判断是否添加黄色的数量。

 

以下为我的题解。

#include<bits/stdc++.h>
using namespace std;
int main() {
	map<char, int> m;
	char correct[9], guess[9];
	for (int i = 0; i < 9; i++) {
		cin >> correct[i];
		m[correct[i]]++;
	}
	int green = 0, yellow = 0;
	for (int i = 0; i < 9; i++) {
		cin >> guess[i];
		green += guess[i] == correct[i];
		m[guess[i]] -= guess[i] == correct[i];
	}
	for (int i = 0; i < 9; i++) {
		if (guess[i] != correct[i]) {
			if (m[guess[i]] > 0)
				yellow++;
			m[guess[i]]--;
		}
	}
	cout << green << '\n' << yellow;

	return 0;
}

TAGS

最新回复 ( 0 )
Copyright © 2024-2024 Merlette 本站已稳定运行了