考试 \operatorname{考试} 考试
题目链接: nowcoder 213759 \operatorname{nowcoder\ 213759} nowcoder 213759
到牛客看:
题目
你和你的朋友参加了一场考试,试卷由 n n n 道判断题构成
你的朋友通过 py 提前得知了他错了 k k k 道题,而你只能和你的朋友对答案
请问你最多能对几道题
输入
第一行,两个整数 n , k n,k n,k ,意义与题目描述中一致
第二行 n n n 个整数,表示你的答案
第三行 n n n 个整数,表示朋友的答案
输出
一行一个整数,表示最多能对几题
样例输入
3 1
1 0 1
0 0 1
样例输出
3
数据范围
0 ≤ k ≤ n ≤ 1000 0\leq k\leq n\leq 1000 0≤k≤n≤1000
判断题答案只包含 0 / 1 0/1 0/1
思路
这道题是一道贪心。
首先,我们可以看出,如果两个人的答案不一样,我们肯定是让别人错,我们对。
那如果两个人的答案一样,就肯定是两个人都对。
那这时候问题来了,因为别人错的题目数量有限制,那可能会有这两种情况:
- 按上面的算别人错的没有你算的那么多,那就说多出来的就一定是你错了别人对了
- 按上面的算别人错的没有你算的那么少,那就是缺的就是两个人都错了而不是两个人都对了。
然后分别处理一下,就可以了。
代码
#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;
}