NOI Online 2022普及组 题解&个人领悟
T1 王国比赛(kingdom)
题目描述
智慧之王 Kri 统治着一座王国。
这天 Kri 决定举行一场比赛,来检验自己大臣的智慧。
比赛由 n n n 道判断题组成,有 m m m 位大臣参加。现在你已经知道了所有大臣的答题情况,但尚未拿到答案,于是你决定先行预测。
具体来说,对于第 i i i 道题,有 x x x 个大臣选对, y y y 个大臣选错(显然有 x + y = m x+y=m x+y=m ),如果 x > y x>y x>y ,那么你预测这题答案为对,否则为错。为了方便,我们保证 m m m 是奇数。
在统计完成后,你拿到了答案,你想知道通过你的预测方式你最后有几道题预测正确。
输入格式
第一行两个正整数 n , m n,m n,m ,保证 m m m 是奇数。
接下来 m m m 行,每行 n n n 个整数,第 i i i 行第 j j j 个整数 a i , j a_{i,j} ai,j 代表第 i i i 位大臣对第 j j j 道题的答案, 1 1 1 表示他选对, 0 0 0 表示他选错。
接下来 1 1 1 行 n n n 个整数, 表示比赛答案, 第 i i i 个数 b i b_i bi 若为 1 1 1 表示第 i i i 道题答案是对,若为 0 0 0 表示答案是错。
输出格式
输出一个整数,表示你最后有几题预测正确。
样例
样例输入 1
3 3
1 0 1
0 1 1
0 1 0
1 1 1
样例输出 1
2
样例解释 1
第一题 x = 1 , y = 2 x=1,y=2 x=1,y=2 你预测答案为错(即 0 0 0 ),实际答案为 1 1 1 ,预测错误。
第二题 x = 2 , y = 1 x=2,y=1 x=2,y=1 你预测答案为对(即 1 1 1 ),实际答案为 1 1 1,预测正确。
第三题 x = 2 , y = 1 x=2,y=1 x=2,y=1 你预测答案为对(即 1 1 1 ),实际答案为 1 1 1,预测正确。
所以预测正确的题数为 2 2 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
数据范围与提示
对于 20 % 20\% 20% 的数据, n ≤ 5 , m = 1 n \leq 5,m=1 n≤5,m=1。
对于 50 % 50\% 50% 的数据, n ≤ 10 , m ≤ 10 n \leq 10,m \leq 10 n≤10,m≤10。
对于 100 % 100\% 100% 的数据, n ≤ 1000 , m ≤ 1000 n \leq 1000,m \leq 1000 n≤1000,m≤1000, m m m 为奇数。
NOI 官方题解
首先要得出 Kri 的预测答案,再和标准答案进行对比。
- 累加该题选 1 1 1的大臣个数
- 得出 Kri 的预测答案
- 对比标准答案,进行对比
Accepted
代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000 + 5;
int n, m, y[MAXN], r[MAXN], x, ans;
int main () {
scanf ("%d %d", &n, &m);
for (int i = 1; i <= m; i ++) {
for (int j = 1; j <= n; j ++) {
scanf ("%d", &x);
y[j] += x;
}
}
for (int i = 1; i <= n; i ++) {
scanf ("%d", &r[i]);
if (y[i] > m / 2) {
ans += r[i] == 1;
} else {
ans += r[i] == 0;
}
}
printf ("%d", ans);
return 0;
}
T2 数学游戏(math)
题目描述
Kri 喜欢玩数字游戏。
一天,他在草稿纸上写下了 t t t 对正整数 ,并对于每一对正整数计算出了 z = x × y × gcd ( x , y ) z=x \times y \times \gcd(x,y) z=