-
Notifications
You must be signed in to change notification settings - Fork 0
/
978.cpp
69 lines (53 loc) · 1.18 KB
/
978.cpp
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
#include <bits/stdc++.h>
using namespace std;
typedef multiset<int, greater<int> > mi;
void out(mi &winner, string name)
{
printf("%s wins\n", name.c_str());
for(auto &u : winner)
printf("%d\n", u);
}
int main()
{
int tc;
scanf("%d", &tc);
while(tc--)
{
mi blue;
mi green;
int f, g, b;
scanf("%d %d %d", &f, &g, &b);
vector <pair<bool, int> > field(f); //blue = 1, green = 0
int val;
for(int i = 0; i < g; ++i) scanf("%d", &val), green.insert(val);
for(int i = 0; i < b; ++i) scanf("%d", &val), blue.insert(val);
while(green.size() && blue.size())
{
field.resize(min(f, int(min(green.size(), blue.size()))));
auto it = field.begin();
for(int i = 0; i < field.size(); ++i, ++it)
{
auto b = blue.begin();
auto g = green.begin();
it->first = *b > *g;
it->second = abs(*b - *g);
blue.erase(b);
green.erase(g);
}
for(auto &u : field)
if(u.first && u.second)
blue.insert(u.second);
else if(u.second)
green.insert(u.second);
}
if(blue.size()) out(blue, "blue");
else if(green.size()) out(green, "green");
else printf("green and blue died\n");
if(tc) printf("\n");
}
return 0;
}
/*
10 10
10 10 10
*/