题目链接:[NOI Online 2022 入门组] 王国比赛 - 洛谷
题目描述
智慧之王 Kri 统治着一座王国。
这天 Kri 决定举行一场比赛,来检验自己大臣的智慧。
比赛由 nn 道判断题组成,有 mm 位大臣参加。现在你已经知道了所有大臣的答题情况,但尚未拿到答案,于是你决定先行预测。
具体来说,对于第 ii 道题,有 xx 个大臣选对,yy 个大臣选错(显然有 x+y=mx+y=m),如果 x>yx>y,那么你预测这题答案为对,否则为错。为了方便,我们保证 mm 是奇数。
在统计完成后,你拿到了答案,你想知道通过你的预测方式你最后有几道题预测正确。
输入格式
第一行两个正整数 n,mn,m,保证 mm 是奇数。
接下来 mm 行,每行 nn 个整数,第 ii 行第 jj 个整数代表第 ii 位大臣对第 jj 道题的答案,11 表示他选对,00 表示他选错。
接下来 11 行 nn 个整数, 表示比赛答案,第 ii 个数 b_ibi 若为 11 表示第 ii 道题答案是对,若为 00 表示答案是错。
输出格式
输出一个整数,表示你最后有几题预测正确。
输入输出样例
输入 #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 解释】
- 第一题 x=1,y=2x=1,y=2 你预测答案为错(即 00),实际答案为1,预测错误。
- 第二题 x=2,y=1x=2,y=1 你预测答案为对(即 11),实际答案为1,预测正确。
- 第三题 x=2,y=1x=2,y=1 你预测答案为对(即 11),实际答案为1,预测正确。
所以预测正确的题数为 22。
【数据范围】
对于 20\%20% 的数据,n\le 5n≤5,m=1m=1。
对于 50\%50% 的数据,n\le 10n≤10,m\le 10m≤10。
对于 100\%100% 的数据,1 \le n\le 10001≤n≤1000,1 \le m\le 10001≤m≤1000,mm 为奇数。
附件下载
kingdom.zip2.91KB
这是一道模拟题。
先输入,查看每一位大臣的答案,如果答对的人数大于答错的人数,我们就预测这一题为正确的,否则预测为错误的。
全部的题都预测完后,将预测的答案和标准的答案比较,如果相同计数器就自加,最后输出。
比赛时暴力写了个40分代码:
#include<bits/stdc++.h>
using namespace std;
int a[1000005];
int b[1005];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=m*n;i++)
{
cin>>a[i];
}
int z=0;
for(int i=1;i<=n;i++)
{
int l=1+i;
int x=0,y=0;
if(a[l]==1)x++;
else y++;
for(int j=1;j<=m-1;j++)
{
l=l+n;
if(a[l]==1)
{
x++;
}else{
y++;
}
}
z=z+1;
if(x>y)
{
b[z]=1;
}
else
{
b[z]=0;
}
}
int c;
int ans=0;
for(int i=1;i<=n;i++)
{
cin>>c;
if(b[i]==c)ans++;
}
cout<<ans<<endl;
return 0;
}
优化后的AC代码如下:
#include <bits/stdc++.h>
using namespace std;
int n, m, s, yu[1007], x, p, q, a[1007][1007];
int main()
{
scanf("%d%d", &n, &m);
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
scanf("%d", &a[i][j]);
}
}
for(int j=1;j<=n;j++){
p=q=0;
for (int i=1; i<=m; i++){
if (a[i][j] == 0) p ++;
if (a[i][j] == 1) q ++;
}
if (p > q) yu[j]=0;
else yu[j]=1;
}
for (int i=1; i<=n; i++){
scanf ("%d", &x);
if (x == yu[i]) s ++;
}
printf ("%d\n", s);
return 0;
}