#include <iostream>
#include <string>
#include <algorithm>
#include <sstream>
#include <vector>
#include <iterator>
using namespace std;
struct talia {
int numer;
vector<int> wygrywa_z;
vector<int> przegrywa_z;
talia(int numer_) {
numer = numer_;
}
};
void usunPolaczenia(int a, vector<talia>*v) {
for (int i = 0; i < v->size(); i++) {
int hehe = v->at(i).przegrywa_z.size();
for (int j = 0; j < v->at(i).przegrywa_z.size(); j++) {
if (v->at(i).przegrywa_z[j] == a)
v->at(i).przegrywa_z.erase(v->at(i).przegrywa_z.begin() +j);
}
for (int j = 0; j < v->at(i).wygrywa_z.size(); j++) {
if (v->at(i).wygrywa_z[j] == a)
v->at(i).wygrywa_z.erase(v->at(i).wygrywa_z.begin() + j);
}
}
}
vector<int> najmniej_wygranych(vector<talia> v) {
vector<int> min_pos;
int min = v[0].wygrywa_z.size();
min_pos.push_back(0);
for (int i = 1; i < v.size(); i++) {
if (v[i].wygrywa_z.size() > min) {
min = v[i].wygrywa_z.size();
min_pos.clear();
min_pos.push_back(i);
}
else if (v[i].wygrywa_z.size() == min) min_pos.push_back(i);
}
return min_pos;
}
vector<int> najwiecej_przegranych(vector<talia> v) {
vector<int> max_pos;
int max = v[0].przegrywa_z.size();
max_pos.push_back(0);
for (int i = 1; i < v.size(); i++) {
if (v[i].przegrywa_z.size() < max) {
max = v[i].przegrywa_z.size();
max_pos.clear();
max_pos.push_back(i);
}
else if(v[i].przegrywa_z.size() == max) max_pos.push_back(i);
}
return max_pos;
}
int main(int argc, char** argv) {
int i;
cin >> i;
for (; i > 0; i--) {
vector<talia> talie_1;
vector<talia> talie_2;
int numer_talii, ilosc_talii, talie_nieremisujace, a, b;
string w;
cin >> ilosc_talii >> talie_nieremisujace;
for (int j = 0; j < ilosc_talii; j++) {
talie_1.push_back(talia(j));
talie_2.push_back(talia(j));
}
for(int j = 0;j<talie_nieremisujace;j++){
cin >> a >> w >> b;
if (w == "<"){
talie_1.at(a - 1).przegrywa_z.push_back(b - 1);
talie_2.at(b - 1).wygrywa_z.push_back(a - 1);
}
if (w == ">"){
talie_2.at(b - 1).przegrywa_z.push_back(a - 1);
talie_1.at(a - 1).wygrywa_z.push_back(b - 1);
}
}
for (int j = talie_1.size()-1; j > 0; j--) {
vector<int> b_najwiecej_przegranych, b_najmniej_wygranych, roznicab;
b_najwiecej_przegranych = najwiecej_przegranych(talie_2);
b_najmniej_wygranych = najmniej_wygranych(talie_2);
set_intersection(b_najmniej_wygranych.begin(), b_najmniej_wygranych.end(), b_najwiecej_przegranych.begin(), b_najwiecej_przegranych.end(), back_inserter(roznicab));
if (!roznicab.empty()) {
usunPolaczenia(talie_2[roznicab[0]].numer, &talie_1);
talie_2.erase(talie_2.begin() + roznicab[0], talie_2.begin() + roznicab[0] + 1);
}
vector<int> a_najwiecej_przegranych, a_najmniej_wygranych, roznicaa;
a_najwiecej_przegranych = najwiecej_przegranych(talie_1);
a_najmniej_wygranych = najmniej_wygranych(talie_1);
set_intersection(a_najmniej_wygranych.begin(), a_najmniej_wygranych.end(), a_najwiecej_przegranych.begin(), a_najwiecej_przegranych.end(), back_inserter(roznicaa));
if (!roznicaa.empty()){
usunPolaczenia(talie_1[roznicab[0]].numer, &talie_2);
talie_1.erase(talie_1.begin() + roznicaa[0], talie_1.begin() + roznicaa[0]+1);
}
}
if (talie_1[0].przegrywa_z.size() == 0 && talie_2[0].przegrywa_z.size() == 0 && talie_1[0].wygrywa_z.size() == 0 && talie_2[0].wygrywa_z.size() == 0)
cout << "REMIS" << endl;
if (talie_1[0].przegrywa_z.size() == 0 && talie_2[0].przegrywa_z.size() == 1 && talie_1[0].wygrywa_z.size() == 1 && talie_2[0].wygrywa_z.size() == 0)
cout << "WYGRANA" << endl;
if (talie_1[0].przegrywa_z.size() == 1 && talie_2[0].przegrywa_z.size() == 0 && talie_1[0].wygrywa_z.size() == 0 && talie_2[0].wygrywa_z.size() == 1)
cout << "PRZEGRANA" << endl;
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | #include <iostream> #include <string> #include <algorithm> #include <sstream> #include <vector> #include <iterator> using namespace std; struct talia { int numer; vector<int> wygrywa_z; vector<int> przegrywa_z; talia(int numer_) { numer = numer_; } }; void usunPolaczenia(int a, vector<talia>*v) { for (int i = 0; i < v->size(); i++) { int hehe = v->at(i).przegrywa_z.size(); for (int j = 0; j < v->at(i).przegrywa_z.size(); j++) { if (v->at(i).przegrywa_z[j] == a) v->at(i).przegrywa_z.erase(v->at(i).przegrywa_z.begin() +j); } for (int j = 0; j < v->at(i).wygrywa_z.size(); j++) { if (v->at(i).wygrywa_z[j] == a) v->at(i).wygrywa_z.erase(v->at(i).wygrywa_z.begin() + j); } } } vector<int> najmniej_wygranych(vector<talia> v) { vector<int> min_pos; int min = v[0].wygrywa_z.size(); min_pos.push_back(0); for (int i = 1; i < v.size(); i++) { if (v[i].wygrywa_z.size() > min) { min = v[i].wygrywa_z.size(); min_pos.clear(); min_pos.push_back(i); } else if (v[i].wygrywa_z.size() == min) min_pos.push_back(i); } return min_pos; } vector<int> najwiecej_przegranych(vector<talia> v) { vector<int> max_pos; int max = v[0].przegrywa_z.size(); max_pos.push_back(0); for (int i = 1; i < v.size(); i++) { if (v[i].przegrywa_z.size() < max) { max = v[i].przegrywa_z.size(); max_pos.clear(); max_pos.push_back(i); } else if(v[i].przegrywa_z.size() == max) max_pos.push_back(i); } return max_pos; } int main(int argc, char** argv) { int i; cin >> i; for (; i > 0; i--) { vector<talia> talie_1; vector<talia> talie_2; int numer_talii, ilosc_talii, talie_nieremisujace, a, b; string w; cin >> ilosc_talii >> talie_nieremisujace; for (int j = 0; j < ilosc_talii; j++) { talie_1.push_back(talia(j)); talie_2.push_back(talia(j)); } for(int j = 0;j<talie_nieremisujace;j++){ cin >> a >> w >> b; if (w == "<"){ talie_1.at(a - 1).przegrywa_z.push_back(b - 1); talie_2.at(b - 1).wygrywa_z.push_back(a - 1); } if (w == ">"){ talie_2.at(b - 1).przegrywa_z.push_back(a - 1); talie_1.at(a - 1).wygrywa_z.push_back(b - 1); } } for (int j = talie_1.size()-1; j > 0; j--) { vector<int> b_najwiecej_przegranych, b_najmniej_wygranych, roznicab; b_najwiecej_przegranych = najwiecej_przegranych(talie_2); b_najmniej_wygranych = najmniej_wygranych(talie_2); set_intersection(b_najmniej_wygranych.begin(), b_najmniej_wygranych.end(), b_najwiecej_przegranych.begin(), b_najwiecej_przegranych.end(), back_inserter(roznicab)); if (!roznicab.empty()) { usunPolaczenia(talie_2[roznicab[0]].numer, &talie_1); talie_2.erase(talie_2.begin() + roznicab[0], talie_2.begin() + roznicab[0] + 1); } vector<int> a_najwiecej_przegranych, a_najmniej_wygranych, roznicaa; a_najwiecej_przegranych = najwiecej_przegranych(talie_1); a_najmniej_wygranych = najmniej_wygranych(talie_1); set_intersection(a_najmniej_wygranych.begin(), a_najmniej_wygranych.end(), a_najwiecej_przegranych.begin(), a_najwiecej_przegranych.end(), back_inserter(roznicaa)); if (!roznicaa.empty()){ usunPolaczenia(talie_1[roznicab[0]].numer, &talie_2); talie_1.erase(talie_1.begin() + roznicaa[0], talie_1.begin() + roznicaa[0]+1); } } if (talie_1[0].przegrywa_z.size() == 0 && talie_2[0].przegrywa_z.size() == 0 && talie_1[0].wygrywa_z.size() == 0 && talie_2[0].wygrywa_z.size() == 0) cout << "REMIS" << endl; if (talie_1[0].przegrywa_z.size() == 0 && talie_2[0].przegrywa_z.size() == 1 && talie_1[0].wygrywa_z.size() == 1 && talie_2[0].wygrywa_z.size() == 0) cout << "WYGRANA" << endl; if (talie_1[0].przegrywa_z.size() == 1 && talie_2[0].przegrywa_z.size() == 0 && talie_1[0].wygrywa_z.size() == 0 && talie_2[0].wygrywa_z.size() == 1) cout << "PRZEGRANA" << endl; } return 0; } |
English