碎碎念
智慧之王 Kri 统治着一座王国。
这天 Kri 决定举行一场比赛,来检验自己大臣的智慧。
比赛由 n 道判断题组成,有 m 位大臣参加。现在你已经知道了所有大臣的答题情况,但尚未拿到答案,于是你决定先行预测。
具体来说,对于第 i 道题,有 x 个大臣选对,y 个大臣选错(显然有 x+y=m),如果 x>y,那么你预测这题答案为对,否则为错。为了方便,我们保证 m 是奇数。
在统计完成后,你拿到了答案,你想知道通过你的预测方式你最后有几道题预测正确。
第一行两个正整数 n,m,保证 m 是奇数。
接下来 m 行,每行 n 个整数,第 i 行第 j 个整数代表第 i 位大臣对第 j 道题的答案,1 表示他选对,0 表示他选错。
接下来 1 行 n 个整数, 表示比赛答案,第 i 个数 b_i 若为 1 表示第 i 道题答案是对,若为 0 表示答案是错。
输出一个整数,表示你最后有几题预测正确。
输入 #1
3 3
1 0 1
0 1 1
0 1 0
1 1 1
输出 #1
2
输入 #2
6 5
1 0 1 1 1 0
0 1 0 1 1 1
0 0 1 0 1 0
1 0 1 0 1 0
0 1 0 1 0 0
1 0 1 0 1 0
输出 #2
4
输入 #3
见附件中的 kingdom3.in
输出 #3
见附件中的 kingdom3.out
【样例 1 解释】
所以预测正确的题数为 2。
【数据范围】
对于 20% 的数据,n≤5,m=1。
对于 50% 的数据,n≤10,m≤10。
对于 100% 的数据,1≤n≤1000,1≤m≤1000,m 为奇数。
题解
#include <iostream>
#include <cstdio>
using namespace std;
#define endl '\n';
int main() {
// 提升cin、cout效率
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, m;
cin >> n >> m;
int true_false[m + 1][n];
for (int i = 0; i <= m; i++) {
for (int j = 0; j < n; j++) {
cin >> true_false[i][j];
}
}
int true_num = 0;
int false_num = 0;
int count = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (true_false[j][i] == 0) {
false_num++;
} else if (true_false[j][i] == 1) {
true_num++;
}
}
if (false_num > true_num && true_false[m][i] == 0) {
count++;
} else if (false_num < true_num && true_false[m][i] == 1) {
count++;
}
true_num = 0;
false_num = 0;
}
cout << count;
return 0;
}