AT1512 採点/Grading

这篇文章讲述了高桥君在批改试卷时遇到的问题,如何通过统计学生答案找出超过半数的共识作为可能的正确答案。涉及编程解决方案和判断条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

高橋君はテストの結果を採点しています。ところが、高橋君はある問題の正解を忘れてしまいました。この問題は、N人が解答していて、それぞれの人の答えは0以上M以下の整数でした。高橋君は、半分を超える人が同じ答えだった場合、それを正解とすることにしました。

N人のこの問題に対する解答が与えられるので、高橋君は何を正解とするか出力してください。ただし、高橋君が正解を決められない場合、? を出力してください。

输入格式

Input is given from Standard Input in the following format:


$ N $   $ M $ 
$ A_1 $   $ A_2 $  ...  $ A_N $ 
  • The first line contains two space-separated integers N\ (1\ ≦\ N\ ≦\ 10^5)N (1 ≦ N ≦ 105) and M\ (1\ ≦\ M\ ≦\ 10^5)M (1 ≦ M ≦ 105) .
  • The second line contains NN space-separated integers A_1,A1​, A_2,A2​, ...,..., A_N.AN​. For each i\ (1\ ≦\ i\ ≦\ N),i (1 ≦ i ≦ N), A_i\ (0\ ≦\ A_i\ ≦\ M)Ai​ (0 ≦ Ai​ ≦ M) represents the answer of the i^{th}ith student.

输出格式

If Mr. Takahashi is going to assume the correct answer to be some integer X, print the value of X in a single line. Otherwise, print ?. Be sure to print a newline at the end of output.

题意翻译

题目大意:

高桥君正在编写一份试卷。很不幸的是,他忘记了一个题的正确答案。而他的N个学生用0~M之间的一个整数回答了这个问题。如果有超过一半的学生回答了一个整数X,那么高桥君就认定正确答案是这个整数X。 你会得到这N个学生的回答。如果高桥君打算以X为这道题的正解,那么请输出X。如果他无法以X为这道题的正解,那么请输出"?"(不包括外面的双引号)

输入输出格式:

输入格式:

N M  A1 A2 A3... AN 第一行是两个用空格隔开的整数N(1≤N≤10^5)和M(1≤M≤10^5)

第二行是用空格隔开的N个学生们的回答。保证每个学生的回答的整数不大于M 。

输出格式:

如果高桥君认定正确答案为某个整数X,输出一个整数X。 否则,输出"?"。务必在输出结束时输出换行符。

输入输出样例

输入 #1                                 输出 #1

3 2                      2
2 1 2

输入 #2                                输出 #2

4 2                      ?
2 1 2 1

输入 #3                                 输出 #3

10 5                     ?
0 1 2 3 4 5 5 5 5 5
#include <iostream>
using namespace std;
int tong[100001];//准备桶排序
int main(){
    int n,m,x,i;
    cin>>n>>m;//输入n和m
    for(i=1;i<=n;i++){
        cin>>x;//输入学生答案
        tong[x]++;//对应答案的数量++
    }
    for(i=0;i<=m;i++){
        if(tong[i]>=(n/2+1)){//比较:如果数量超过一半,则输出这个答案,然后结束程序
            cout<<i<<endl;
            return 0;
        }
    }
    cout<<"?"<<endl;//如果都没有数量超过一半的答案,输出“?”
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值