Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cmath>
- #include <cstdio>
- #include <vector>
- #include <iostream>
- #include <algorithm>
- #include <string>
- #include <unordered_map>
- #include <deque>
- using namespace std;
- int main() {
- string tests;
- string line;
- /* Enter your code here. Read input from STDIN. Print output to STDOUT */
- getline(cin, tests);
- getline(cin, line);
- // int counter = 0
- for(int i = 0; i < std::stoi(tests); i++){
- int p;
- cin >> p;
- getline(cin, line);
- // cout << candidates;
- vector<string> c(p);
- // unordered_map<class vect, class _Tp>
- for(int j = 0; j < p; j++){
- getline(cin, c[j]);
- // cout << c[j];
- // cout << j;
- }
- string s;
- deque<deque<int>> ballots;
- while(std::getline(std::cin,s) && s[0] != 0){
- deque<int> b;
- // vector <string> votes;
- // split(votes, s, " ")
- // for (int v = 0; v < votes.size(); v++){
- // cout << v << endl;
- // }
- for(int x = 0; x <= s.size(); x++){
- int vote = 0;
- while(s[x] != ' ' && s[x] != 0){
- vote = vote*10;
- vote = vote+(s[x]-48);
- ++x;
- }
- b.push_back(vote);
- // cout << s[x];
- }
- //cout << endl;
- //cout << b.size();
- ballots.push_back(b);
- //cout << s << endl << s.size();
- }
- deque<deque<deque<int>>> candidates(p);
- // cout << candidates.size() << endl;
- for (int k = 0; k < ballots.size(); k++){
- int top_vote = ballots[k][0];
- // cout << endl << "topvote : "<< top_vote << endl;
- // cout << ballots[k][0];
- candidates[top_vote-1].push_back(ballots[k]);
- // for(int q = 0; q < ballots[k].size(); q++){
- // cout << ballots[k][q] << " " ;
- // }
- // cout << endl;
- }
- // for (int k = 0; k < candidates.size(); k++){
- // cout << candidates[k].size() << " ";
- // }
- // cout << endl << candidates.size() << endl;
- // cout << ballots.size() << endl;
- int tie_count = candidates[0].size();
- int minimum = 1001;
- bool tie = 0;
- bool flag = 1;
- int counternew = 0;
- while (flag){
- ++counternew;
- // cout << endl<< "counter : " << counternew++<< endl;
- tie_count = 0;
- minimum = 1001;
- tie = 0;
- for (int k = 0; k < candidates.size(); k++){
- // cout << candidates[k].size() << endl;
- if(candidates[k].size() != 0 && tie_count == 0)
- tie_count = candidates[k].size();
- // cout << tie_count <<endl;
- if (candidates[k].size() > ballots.size()/2){
- //cout << candida ballots.size()/2 << endl;
- // cout << endl << "candidate" << k << endl;
- // cout << endl << "Majority vote" << endl;
- if(i == std::stoi(tests)-1)
- cout << c[k];
- else
- cout << c[k] << endl;
- flag = 0;
- tie = 1;
- break;
- }
- else {
- // cout << endl << "in else" << endl;
- if (candidates[k].size() != tie_count && candidates[k].size() != 0) {
- // cout << endl << "not TIE" << endl;
- tie = 1;
- }
- if (candidates[k].size() < minimum && candidates[k].size() != 0)
- minimum = candidates[k].size();
- }
- }
- if (flag == 0)
- break;
- if (tie == 0){
- flag = 1;
- break;
- }
- for (int k = 0; k < candidates.size(); k++){
- int size = candidates[k].size();
- if (size == minimum && size != 0){
- for(int b = 0; b < minimum; b++){
- candidates[k][b].pop_front();
- // cout << endl << "re-assigning ballot" << endl;
- int top_vote = candidates[k][b][0];
- while(candidates[top_vote - 1].size() == 0 || candidates[top_vote-1].size() == minimum){
- candidates[k][b].pop_front();
- top_vote = candidates[k][b][0];
- }
- candidates[top_vote-1].push_back(candidates[k][b]);
- }
- for(int b = 0; b < minimum; b++){
- candidates[k].pop_front(); }
- }
- }
- }
- if (tie == 0){
- for (int k = 0; k <candidates.size(); k++){
- if (candidates[k].size() != 0)
- {
- // cout << endl << "tie!" <<endl;
- cout << c[k]<<endl;
- }
- }
- }
- if(i != std::stoi(tests)-1)
- // cout<<counternew<<endl;
- cout<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement