# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
422034 |
2021-06-09T15:27:32 Z |
pure_mem |
Scales (IOI15_scales) |
C++14 |
|
229 ms |
324 KB |
#include "scales.h"
#include <bits/stdc++.h>
#define ll long long
#define MP make_pair
#define X first
#define Y second
using namespace std;
const int N = 720;
int p[N][6], mans[N][6], bad[N];
struct Event{
int tp, a, b, c, d;
};
int check(int id, Event x){
int mn = min(min(p[id][x.a], p[id][x.b]), p[id][x.c]);
int mx = max(max(p[id][x.a], p[id][x.b]), p[id][x.c]);
int md = p[id][x.a] + p[id][x.b] + p[id][x.c] - mn - mx;
int cur;
if(x.tp == 0) cur = mn;
else if(x.tp == 1) cur = md;
else if(x.tp == 2) cur = mx;
else{
cur = mn;
if(mn > p[id][x.d]) cur = mn;
else if(md > p[id][x.d]) cur = md;
else if(mx > p[id][x.d]) cur = mx;
}
return cur;
}
int calc(Event cur){
if(cur.tp == -1) return N + 12;
unordered_map<int, int> mp;
int mx = 0;
for(int i = 0, val;i < N;i++){
if(bad[i]) continue;
val = check(i, cur);
if(p[i][cur.a] == val) val = cur.a;
else if(p[i][cur.b] == val) val = cur.b;
else val = cur.c;
mp[val]++;
mx = max(mx, mp[val]);
}
return mx;
}
void prep(Event cur){
int resp;
if(cur.tp == 0) resp = getLightest(cur.a + 1, cur.b + 1, cur.c + 1);
if(cur.tp == 1) resp = getMedian(cur.a + 1, cur.b + 1, cur.c + 1);
if(cur.tp == 2) resp = getHeaviest(cur.a + 1, cur.b + 1, cur.c + 1);
if(cur.tp == 3) resp = getNextLightest(cur.a + 1, cur.b + 1, cur.c + 1, cur.d + 1);
//cerr << cur.tp << " " << cur.a << " " << cur.b << " " << cur.c << " " << cur.d << " " << resp - 1 << "\n";
int me = 0;
for(int i = 0;i < N;i++){
if(bad[i]) continue;
bad[i] |= (p[i][resp - 1] != check(i, cur));
me += !bad[i];
}
}
void init(int T) {
for(int i = 0;i < 6;i++) p[0][i] = i + 1;
for(int it = 1;it < N;it++){
for(int i = 0;i < 6;i++)
p[it][i] = p[it - 1][i];
next_permutation(p[it], p[it] + 6);
}
for(int it = 0;it < N;it++){
for(int i = 0;i < 6;i++)
mans[it][p[it][i] - 1] = i + 1;
}
}
int isGood(){
int x = -1;
for(int i = 0;i < N;i++){
if(!bad[i]){
if(x != -1) return -1;
else x = i;
}
}
return x;
}
void orderCoins() {
for(int i = 0;i < N;i++) bad[i] = 0;
while(isGood() == -1){
Event cur = {-1, -1, -1, -1};
for(int a = 0;a < 6;a++){
for(int b = a + 1;b < 6;b++){
for(int c = b + 1;c < 6;c++){
Event tmp;
tmp = {0, a, b, c, -1};
if(calc(cur) >= calc(tmp)) cur = tmp;
tmp = {1, a, b, c, -1};
if(calc(cur) >= calc(tmp)) cur = tmp;
tmp = {2, a, b, c, -1};
if(calc(cur) >= calc(tmp)) cur = tmp;
for(int d = 0;d < 6;d++){
if(a == d || b == d || c == d) continue;
tmp = {3, a, b, c, d};
if(calc(cur) >= calc(tmp)) cur = tmp;
}
}
}
}
prep(cur);
}
return answer(mans[isGood()]);
}
Compilation message
scales.cpp: In function 'void init(int)':
scales.cpp:65:15: warning: unused parameter 'T' [-Wunused-parameter]
65 | void init(int T) {
| ~~~~^
scales.cpp: In function 'void orderCoins()':
scales.cpp:94:36: warning: missing initializer for member 'Event::d' [-Wmissing-field-initializers]
94 | Event cur = {-1, -1, -1, -1};
| ^
scales.cpp: In function 'void prep(Event)':
scales.cpp:51:9: warning: 'resp' may be used uninitialized in this function [-Wmaybe-uninitialized]
51 | int resp;
| ^~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Partially correct |
201 ms |
204 KB |
Output is partially correct |
2 |
Partially correct |
206 ms |
204 KB |
Output is partially correct |
3 |
Partially correct |
206 ms |
304 KB |
Output is partially correct |
4 |
Partially correct |
207 ms |
304 KB |
Output is partially correct |
5 |
Partially correct |
220 ms |
204 KB |
Output is partially correct |
6 |
Partially correct |
209 ms |
324 KB |
Output is partially correct |
7 |
Correct |
209 ms |
300 KB |
Output is correct |
8 |
Correct |
205 ms |
312 KB |
Output is correct |
9 |
Partially correct |
208 ms |
204 KB |
Output is partially correct |
10 |
Partially correct |
204 ms |
308 KB |
Output is partially correct |
11 |
Partially correct |
202 ms |
304 KB |
Output is partially correct |
12 |
Partially correct |
203 ms |
308 KB |
Output is partially correct |
13 |
Partially correct |
204 ms |
308 KB |
Output is partially correct |
14 |
Partially correct |
200 ms |
204 KB |
Output is partially correct |
15 |
Correct |
201 ms |
204 KB |
Output is correct |
16 |
Correct |
205 ms |
316 KB |
Output is correct |
17 |
Partially correct |
200 ms |
204 KB |
Output is partially correct |
18 |
Partially correct |
203 ms |
312 KB |
Output is partially correct |
19 |
Partially correct |
217 ms |
300 KB |
Output is partially correct |
20 |
Partially correct |
203 ms |
304 KB |
Output is partially correct |
21 |
Partially correct |
212 ms |
204 KB |
Output is partially correct |
22 |
Partially correct |
202 ms |
204 KB |
Output is partially correct |
23 |
Partially correct |
206 ms |
204 KB |
Output is partially correct |
24 |
Partially correct |
205 ms |
204 KB |
Output is partially correct |
25 |
Partially correct |
229 ms |
300 KB |
Output is partially correct |
26 |
Partially correct |
205 ms |
316 KB |
Output is partially correct |
27 |
Partially correct |
205 ms |
300 KB |
Output is partially correct |
28 |
Partially correct |
204 ms |
204 KB |
Output is partially correct |
29 |
Partially correct |
203 ms |
312 KB |
Output is partially correct |
30 |
Partially correct |
210 ms |
304 KB |
Output is partially correct |
31 |
Partially correct |
208 ms |
300 KB |
Output is partially correct |
32 |
Partially correct |
206 ms |
304 KB |
Output is partially correct |
33 |
Partially correct |
203 ms |
204 KB |
Output is partially correct |
34 |
Correct |
207 ms |
304 KB |
Output is correct |
35 |
Partially correct |
200 ms |
304 KB |
Output is partially correct |
36 |
Partially correct |
209 ms |
304 KB |
Output is partially correct |
37 |
Partially correct |
213 ms |
324 KB |
Output is partially correct |
38 |
Partially correct |
204 ms |
204 KB |
Output is partially correct |
39 |
Partially correct |
206 ms |
300 KB |
Output is partially correct |
40 |
Partially correct |
200 ms |
204 KB |
Output is partially correct |