1 条题解

  • 0
    @ 2025-8-24 22:35:52

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar SunSkydp

    搬运于2025-08-24 22:35:52,当前版本为作者最后更新于2022-02-05 13:08:53,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    可能会有更好的阅读体验

    首先,我们得理解题意。

    给定两个 3×33 \times 3 的矩阵,分别是正确答案矩阵和奶牛猜的矩阵。绿色高亮显示位置和品种都正确的奶牛,黄色高亮显示品种正确但位置错误的奶牛,求绿色高亮数量和黄色高亮数量。

    位置和品种都正确的奶牛直接判断累计相加就行了,把正确的奶牛排除后,我们可以设置两个计数器数组,分别表示正确答案矩阵和奶牛猜想矩阵中每个品种奶牛的数目(排除正确的奶牛)。

    对于每一品种奶牛,题目中说:

    如果猜测方阵中有 xx 个特定品种的奶牛,并且 答案方阵中有 yxy \le x 头该品种奶牛(不包括位置正确而得到绿色高亮显示的奶牛),那么猜测方阵的 xx 头奶牛中只有 yy 头奶牛应该以黄色高亮显示。

    所以我们只要取正确答案矩阵和奶牛猜想矩阵中每个品种奶牛排除正确奶牛后的数目的最小值即可。

    如果还有不懂得话,可以尝试从下面的代码中理解,但是要杜绝抄袭,洛谷非常重视学术诚信。此类行为将会导致您成为作弊者。 具体细则请查看洛谷社区规则

    #include<bits/stdc++.h>
    using namespace std;
    char a[4][4], b[4][4];
    int green, yellow, rall[27], gall[27];
    int main() {
    	for(int i = 1; i <= 3; i++)
    		for(int j = 1; j <= 3; j++)
    			cin >> a[i][j];
    	for(int i = 1; i <= 3; i++)
    		for(int j = 1; j <= 3; j++)
    			cin >> b[i][j];
    	for(int i = 1; i <= 3; i++)
    		for(int j = 1; j <= 3; j++)
    			if(a[i][j] == b[i][j]) green++;
    			else {
    				rall[a[i][j] - 'A' + 1]++;
    				gall[b[i][j] - 'A' + 1]++;
    			}
    	for(int i = 1; i <= 26; i++) yellow += min(rall[i], gall[i]);
    	printf("%d\n%d\n", green, yellow);
    	return 0;
    }
    
    • 1

    信息

    ID
    7457
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者