题解 | #投票统计#

投票统计

https://ac.nowcoder.com/acm/problem/15203

#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    int t;    cin>>t;
    while(t--){
        int n,i,j;    cin>>n;
        int a[n];
        pair<int,int> t[n];//first存数量,second存编号
    
        for(int i=0; i<n; i++)    scanf("%d",&a[i]);//输入题目编号
        sort(a,a+n);    //题目编号排序
        
        t[0].second=a[0];   t[0].first++;//存好第一个题目编号,数量加一
        for(i=0,j=1; j<n; )//开始遍历投票的题目编号
        {
            while(t[i].second == a[j])//如果遍历到的题目与所维护的相同
                j++, t[i].first++; //该题目数量加一,并遍历下一道题
            i++, t[i].second=a[j]; //否则维护新出现的题目
        }

        sort(t,t+i);//排序,pair会先对first即数量排序,再对second编号排序
        i--;//退出循环后i为被投票的题目数,减一变成最大下标
        int cnt = i;    //标记最大下标
        //如果后一道题与前一道数量相同,下标前移
        while(t[i].first == t[i-1].first)    i--;
        if(i==0)    cout<<"-1"<<endl;//如果i等于0,说明所有题目票数相同
        else{    //否则输出拥有最高票数的题目数
            cout<<cnt-i+1<<endl; //用最大下标减去最小下标加一获得
            for(int j=i; j<=cnt; j++)//如果最高票数题目有多个,遍历输出题目
                cout<<t[j].second<<' ';
            cout<<endl;
        }
    }
}
全部评论

相关推荐

吐泡泡的咸鱼:我也工作了几年了,也陆陆续续面试过不少人,就简历来说,第一眼学历不太够,你只能靠你的实习或者论文或者项目经历,然后你没有论文,没有含金量高的比赛和奖项,只能看实习和项目,实习来说,你写的实习经历完全不清楚你想找什么工作?行研?数据分析?且写的太少了,再看项目,这些项目先不说上过大学读过研究生的都知道很水,然后对你想找的岗位有什么帮助呢?项目和实习也完全不匹配啊,你好像在努力将你所有的经历都放在简历里想表现你的优秀,但是对于你想找的岗位来说,有什么用呢?最后只能获得岗位不匹配的评价。所以你需要明白你想要找的岗位要求是什么,是做什么的,比如产品经理,然后再看你的经历里有什么匹配的上这个岗位,或者对这个岗位以及这个岗位所在的公司有价值,再写到你的简历上
点赞 评论 收藏
分享
04-18 15:58
已编辑
门头沟学院 设计
kaoyu:这一看就不是计算机的,怎么还有个排斥洗碗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务