题目链接:https://ac.nowcoder.com/acm/problem/213759

到主站看:https://blog.csdn.net/weixin_43346722/article/details/110144704

题目

你和你的朋友参加了一场考试,试卷由 道判断题构成

你的朋友通过 py 提前得知了他错了 道题,而你只能和你的朋友对答案

请问你最多能对几道题

输入

第一行,两个整数 ,意义与题目描述中一致

第二行 个整数,表示你的答案

第三行 个整数,表示朋友的答案

输出

一行一个整数,表示最多能对几题

样例输入

3 1
1 0 1
0 0 1

样例输出

3

数据范围

判断题答案只包含

思路

这道题是一道贪心。

首先,我们可以看出,如果两个人的答案不一样,我们肯定是让别人错,我们对。
那如果两个人的答案一样,就肯定是两个人都对。

那这时候问题来了,因为别人错的题目数量有限制,那可能会有这两种情况:

  1. 按上面的算别人错的没有你算的那么多,那就说多出来的就一定是你错了别人对了
  2. 按上面的算别人错的没有你算的那么少,那就是缺的就是两个人都错了而不是两个人都对了。

然后分别处理一下,就可以了。

代码

#include<cstdio>

using namespace std;

int n, k, a[1001], x, ans;

int main() {
    scanf("%d %d", &n, &k);
    for (int i = 1; i <= n; i++) scanf("%d", &a[i]);

    for (int i = 1; i <= n; i++) {
        scanf("%d", &x);
        if (a[i] != x) {//不一样
            if (k) {//你算出来别人错的一定不能超过别人真正错的
                k--;
                ans++;
            }
        }
        else ans++;//一样
    }

    printf("%d", ans - k);//要减去一样的也一定要错的题

    return 0;
}