当前位置:首页 > 题解目录 > 正文内容

【题解】王国比赛

亿万年的星光4年前 (2022-04-01)题解目录2432

【题目描述】

智慧之王 Kri 统治着一座王国。 这天 Kri 决定举行一场比赛,来检验自己大臣的智慧。 比赛由 n道判断题组成,有 m位大臣参加。现在你已经知道了所有大臣的答题情况,但尚未拿到答 案,于是你决定先行预测。 具体来说,对于第 i道题,有 x个大臣选对, y个大臣选错(显然有x+y=m ),如果x>y,那 么你预测这题答案为对,否则为错。为了方便,我们保证 m是奇数。 在统计完成后,你拿到了答案,你想知道通过你的预测方式你最后有几道题预测正确。

【输入描述】

第一行两个正整数 n,m,保证m 是奇数。 接下来 m行,每行n 个整数,第i 行第j个整数 aij代表第 i位大臣对第 j道题的答案, 1表示他选 对, 0表示他选错。 接下来1 行 n个整数, 表示比赛答案, 第i 个数 bi若为 1表示第i 道题答案是对,若为 0表示答案是 错。

【输出描述】

输出一个整数,表示你最后有几题预测正确。

【样例输入1】

3 3
1 0 1
0 1 1
0 1 0
1 1 1

【样例输出1】

2

【样例1解释】

第一题 你预测答案为错(即0),实际答案为1,预测错误。 

第二题 你预测答案为对(即1),实际答案为1,预测正确。

第三题 你预测答案为对(即1),实际答案为1,预测正确。 所以预测正确的题数为2。

【样例2输入】

5 6
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%的数据,n<=5,m=1 。 

对于50%的数据,n<=10,m<=10 。 

对于100%的数据, n<=1000 , m<=1000,m为奇数 。

【题目分析】

  • 整体比较简单,是一个简单的二维数组的题目

    • 参考下面这副图。题目中有句描述:

      第i 行第j个整数 aij代表第 i位大臣对第 j道题的答案

      也就是 :

      第1 行第1个整数 a11代表第 1位大臣对第 1道题的答案

      第1 行第2个整数 a12代表第 1位大臣对第 2道题的答案

      第1 行第3个整数 a13代表第 1位大臣对第 3道题的答案
      ......

      可以看出,横向的行表示一个人的不同题目的答案

      竖向的列表示不同的人同一道题目的答案,也就这个题目要求的。


      • 题目中的另外一个坑,题目输入的是n和m。但是n表示的含义是列,m表示的含义是行。不要因为写的习惯了出错。


      • 注意题目遍历和统计的方式,这个题目统计的是列不是行



【参考代码】

#include<bits/stdc++.h>
using namespace std;
int m,n; //行和列 
int a[1005][1005]; //存储预测的数组
int ans[1005]; //存储正确答案的数组
int sum; //最终预测正确的数量 
int main(){
	freopen("kingdom3.in","r",stdin);
	freopen("kingdom3.out","w",stdout);
 	cin>>n>>m;  
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];   //读入预测数组 
		}
	} 
	for(int i=1;i<=n;i++){
		cin>>ans[i]; //读入结果数组 
	} 
	//下面开始遍历二维数组的列,并统计预测结果
	for(int i=1;i<=n;i++){  //行和列互换
		int rightNum=0; //每道题对的数量 
		int errorNum=0; //每道题错的数量 
		for(int j=1;j<=m;j++){
			if(a[j][i]==1){
				rightNum++;
			}else{
				errorNum++;
			}
		}
		//统计完毕后,统计预测的结果
		int result=0; //每轮的预测结果 
		if(rightNum>errorNum){
			result=1;
		}
		if(result==ans[i]){
			sum++; 
		}
	} 
	cout<<sum;
	return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

【题解】发工资

【题目描述】作为程序猿,最盼望的日子就是每月的9号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵但是对于公司财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小李最近就在考虑一个问题:如果每...

【题解】队列问题

【题解】队列问题

4.队列问题(lru.cpp)【题目描述】有一个大小为n的页面缓存队列,初始为空,当计算机访问页面时,若缓存队列没有该页面,则加入到缓存队列中,若队列已满,则将删除访问时间最远的页面。有Q次询问,每次...

质数环

【题目描述】有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。为了简便起见,我们规定每个素数环都从1开始。例如,下面就是6的一个素数环。1 4 3...

【题解】后缀表达式的值

【题解】后缀表达式的值

【题目描述】从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。以@作为结束标...

【题解】分发饼干

【题目描述】假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;...

【题解】切割钢管

【题解】切割钢管

【题目描述】小A是某工地的计算工程师。工地现有 n 根钢管,第 i 根钢管的长度为 ai。现在想用这 n 根钢管来做一个支撑用的柱子。我么可以切割这些钢管成为更短的钢管,但是不能缝合两根钢管。为了安全...