#include "koala.h"
#include <bits/stdc++.h>
using namespace std;
int arr1[100], arr2[100];
vector<int> ord;
set<int> used;
vector<int> glo;
int n, w;
int minValue(int N, int W) {
// TODO: Implement Subtask 1 solution here.
// You may leave this function unmodified if you are not attempting this
// subtask.
for(int i = 0; i < N; ++i){
arr1[i] = 0;
}
arr1[0] = 1;
playRound(arr1, arr2);
for(int i = 0; i < N; ++i){
if(arr2[i] <= arr1[i])return i;
}
return 0;
}
int maxValue(int N, int W) {
// TODO: Implement Subtask 2 solution here.
// You may leave this function unmodified if you are not attempting this
// subtask.
vector<int> go(N);
iota(go.begin(),go.end(),0);
int sz = go.size();
while(sz != 1){
for(int i = 0; i < N; ++i){
arr1[i] = 0;
arr2[i] = 0;
}
for(int i = 0; i < sz; ++i){
arr1[go[i]] = W/sz;
}
playRound(arr1,arr2);
go.clear();
for(int i = 0; i < N; ++i){
if(arr2[i] > arr1[i] && arr1[i] > 0)go.push_back(i);
}
sz = go.size();
}
return go[0];
}
int greaterValue(int N, int W) {
// TODO: Implement Subtask 3 solution here.
// You may leave this function unmodified if you are not attempting this
// subtask.
memset(arr1,0,N);
arr1[0] = 4;
arr1[1] = 4;
playRound(arr1,arr2);
if(arr2[0] <= 4 && arr2[1] <= 4){
arr1[0] = 2;
arr1[1] = 2;
playRound(arr1,arr2);
if(arr2[0] <= 2 && arr2[1] <= 2){
arr1[0] = 1;
arr1[1] = 1;
playRound(arr1,arr2);
return arr2[1] > arr2[0];
}
if(arr2[0] > 2 && arr2[1] > 2){
arr1[0] = 3;
arr1[1] = 3;
playRound(arr1,arr2);
return arr2[1] > arr2[0];
}
return arr2[1] > arr2[0];
}
if(arr2[0] > 4 && arr2[1] > 4){
arr1[0] = 8;
arr1[1] = 8;
playRound(arr1,arr2);
if(arr2[0] <= 8 && arr2[1] <= 8){
arr1[0] = 6;
arr1[1] = 6;
playRound(arr1,arr2);
return arr2[1] > arr2[0];
}
return arr2[1] > arr2[0];
}
return arr2[1] > arr2[0];
}
bool comp(int a, int b){
for(int i = 0; i < n; ++i){
arr1[i] = 0;
}
arr1[a] = arr1[b] = n;
playRound(arr1,arr2);
return arr2[a] < arr2[b];
}
void solve(int l, int r){
if(l == r)return;
memset(arr1,0,sizeof arr1);
vector<int> a, b;
int cn = 0;
int us = 0;
while(us <= n-r){
cn++;
us+=cn;
}
us-=cn;
cn--;
for(int i = l; i <= r; ++i){
arr1[glo[i]] = cn;
}
playRound(arr1, arr2);
for(int i = l; i <= r; ++i){
if(arr2[glo[i]] > arr1[glo[i]]){
a.push_back(glo[i]);
}
else{
b.push_back(glo[i]);
}
}
for(int i = l; i < l+(int)a.size(); ++i){
glo[i] = a[i-l];
}
for(int i = l+a.size(); i <= r; ++i){
glo[i] = b[i-l-a.size()];
}
solve(l,a.size()+l-1);
solve(a.size()+l,r);
}
void allValues(int N, int W, int *P) {
n = N;w = W;
if(N*2 == W){
// TODO: Implement Subtask 4 solution here.
// You may leave this block unmodified if you are not attempting this
// subtask.
vector<int> x(N);
iota(x.begin(),x.end(),0);
stable_sort(x.begin(),x.end(),comp);
for(int i = 0; i < N; ++i){
P[x[i]] = i+1;
}
}
else {
// TODO: Implement Subtask 5 solution here.
// You may leave this block unmodified if you are not attempting this
// subtask.
for(int i = 0; i < N; ++i){
glo.push_back(i);
}
solve(0,N-1);
for(int i = 0; i < N; ++i){
P[glo[i]] = N-i;
}
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
384 KB |
Output is correct |
2 |
Correct |
7 ms |
384 KB |
Output is correct |
3 |
Correct |
6 ms |
384 KB |
Output is correct |
4 |
Correct |
6 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
20 ms |
384 KB |
Output is correct |
2 |
Correct |
21 ms |
384 KB |
Output is correct |
3 |
Correct |
20 ms |
384 KB |
Output is correct |
4 |
Correct |
20 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
87 ms |
384 KB |
Output is correct |
2 |
Correct |
94 ms |
384 KB |
Output is correct |
3 |
Correct |
88 ms |
512 KB |
Output is correct |
4 |
Correct |
92 ms |
632 KB |
Output is correct |
5 |
Correct |
92 ms |
384 KB |
Output is correct |
6 |
Correct |
87 ms |
384 KB |
Output is correct |
7 |
Correct |
95 ms |
384 KB |
Output is correct |
8 |
Correct |
97 ms |
632 KB |
Output is correct |
9 |
Correct |
87 ms |
384 KB |
Output is correct |
10 |
Correct |
89 ms |
384 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
34 ms |
384 KB |
Output is correct |
2 |
Correct |
53 ms |
376 KB |
Output is correct |
3 |
Correct |
54 ms |
376 KB |
Output is correct |
4 |
Correct |
52 ms |
384 KB |
Output is correct |
5 |
Correct |
51 ms |
384 KB |
Output is correct |
6 |
Correct |
53 ms |
384 KB |
Output is correct |
7 |
Correct |
59 ms |
384 KB |
Output is correct |
8 |
Correct |
52 ms |
384 KB |
Output is correct |
9 |
Correct |
52 ms |
384 KB |
Output is correct |
10 |
Correct |
55 ms |
380 KB |
Output is correct |
11 |
Correct |
56 ms |
384 KB |
Output is correct |
12 |
Correct |
24 ms |
384 KB |
Output is correct |
13 |
Correct |
49 ms |
384 KB |
Output is correct |
14 |
Correct |
47 ms |
384 KB |
Output is correct |
15 |
Correct |
47 ms |
384 KB |
Output is correct |
16 |
Correct |
48 ms |
384 KB |
Output is correct |
17 |
Correct |
48 ms |
376 KB |
Output is correct |
18 |
Correct |
48 ms |
384 KB |
Output is correct |
19 |
Correct |
47 ms |
384 KB |
Output is correct |
20 |
Correct |
47 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
384 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |