uva10142(未ac)

来源:互联网 发布:天池大数据竞赛入门 编辑:程序博客网 时间:2024/05/17 04:36
#include <iostream>#include <stdio.h>#include <queue>#include <string.h>#include <vector>#include <sstream>#include <algorithm>using namespace std;vector<queue<int> > vote;int high,low;vector<string> namelist;int candidate[25];bool elimnate[25];int candidate_num;int cases;void init(){    memset(elimnate,false,sizeof(elimnate));    memset(candidate,0,sizeof(candidate));    vote.clear();    namelist.clear();}void read(){    cin>>candidate_num;    string name;    getline(cin, name);    for(int i=0; i<candidate_num; i++)    {        getline(cin, name);        namelist.push_back(name);    }    string ballot;    getline(cin,ballot);    while(ballot!="")    {        queue<int> q;        stringstream ss(ballot);        int id;        while(ss>>id)        {            q.push(id);        }        vote.push_back(q);        getline(cin,ballot);    }}void compute(){    for(int i=0; i<vote.size(); i++)    {        int id=vote[i].front();        if(!elimnate[id-1])            candidate[id-1]++;    }    high=0;    low=2000;    for(int i=0; i<candidate_num; i++)    {        if(!elimnate[i])        {            high=max(high,candidate[i]);            low=min(low,candidate[i]);        }    }    while(high>=low)    {        if(2*high>vote.size()) return ;        for(int i=0; i<candidate_num; i++)            if(candidate[i]==low)                elimnate[i]=true;        for(int i=0; i<vote.size(); i++)            if(elimnate[vote[i].front()-1])            {                while(elimnate[vote[i].front()-1])                    vote[i].pop();                candidate[vote[i].front()-1]++;            }        high=0;        low=2000;        for(int i=0; i<candidate_num; i++)        {            if(!elimnate[i])            {                high=max(high,candidate[i]);                low=min(low,candidate[i]);            }        }    }}void outresult(){    for(int i=0; i<candidate_num; i++)        if(candidate[i]==high)            cout<<namelist[i]<<endl;}int main(){    cin>>cases;    int t=cases;    while(cases--)    {        init();        read();        compute();        outresult();        cout<<t-cases<<endl;        if(t!=cases) cout<<endl;    }    return 0;}
原创粉丝点击