题解 | #投票统计#

投票统计

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;
        }
    }
}
全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
Ncsbbss:又想干活又想要工资,怎么什么好事都让你占了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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