#include <vector>
#include "communication.h"
typedef long long ll;
using namespace std;
struct interval {
ll l, r;
interval(ll l, ll r) : l(l), r(r) {}
bool contains(ll x) {
return l <= x && x < r;
}
ll length() {
return r - l;
}
interval shrink(ll o, ll s) {
return interval(min(r, l + o), min(r, l + o + s));
}
};
vector<interval> splitIntervals(vector<interval> c, ll o, ll s) {
vector<interval> r;
for (interval &it : c) {
if (s > 0 && it.length() - o > 0)
r.push_back(it.shrink(o, s));
s -= max(0LL, min(s, it.length() - o));
o -= min(o, it.length());
}
return r;
}
bool contains(vector<interval> c, ll x) {
for (interval &it : c)
if (it.contains(x))
return true;
return false;
}
struct state {
ll s = 0;
vector<interval> c;
state() {}
state(ll N): s(N) {
c.emplace_back(1, N + 1);
}
state(vector<vector<interval>> &cs) {
for (vector<interval> &c : cs)
add(c);
}
void add(interval it) {
s += it.length();
c.push_back(it);
}
void add(vector<interval> &c) {
for (interval &it : c)
add(it);
}
vector<vector<interval>> split() {
vector<vector<interval>> r;
ll s1 = s / 3, s2 = (s - s1) / 2, s3 = s - s1 - s2;
r.push_back(splitIntervals(c, 0, s1));
r.push_back(splitIntervals(c, s1, s2));
r.push_back(splitIntervals(c, s1 + s2, s3));
return r;
}
ll size() {
return s;
}
vector<ll> remaining() {
vector<ll> r;
for (interval &it : c)
for (ll v = it.l; v < it.r; v++)
r.push_back(v);
return r;
}
};
std::pair<int, int> solve(int N, int X = -1) {
state s(N);
while (s.size() > 2) {
vector<vector<interval>> c = s.split();
int b1, b2, b3, b4;
if (X != -1) {
int q1 = contains(c[0], X), q2 = q1 || contains(c[1], X);
b1 = send(q1), b2 = send(q2), b3 = send(q2), b4 = send(q1);
} else
b1 = receive(), b2 = receive(), b3 = receive(), b4 = receive();
c.erase(c.begin() + (b2 == b3 ? (b2 ? 2 : 1) : ((b2 ? b4 : b1) ? 1 : 0)));
s = state(c);
}
vector<ll> r = s.remaining();
return {r[0], r.back()};
}
void encode(int N, int X) {
solve(N, X);
}
std::pair<int, int> decode(int N) {
return solve(N);
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
9 ms |
1676 KB |
Output is correct |
2 |
Correct |
11 ms |
1672 KB |
Output is correct |
3 |
Correct |
14 ms |
1736 KB |
Output is correct |
4 |
Correct |
6 ms |
1740 KB |
Output is correct |
5 |
Correct |
9 ms |
1600 KB |
Output is correct |
6 |
Correct |
31 ms |
1804 KB |
Output is correct |
7 |
Correct |
38 ms |
1728 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Partially correct |
1271 ms |
1768 KB |
Output is partially correct |
2 |
Partially correct |
585 ms |
1760 KB |
Output is partially correct |
3 |
Partially correct |
836 ms |
1792 KB |
Output is partially correct |
4 |
Partially correct |
1322 ms |
1748 KB |
Output is partially correct |
5 |
Partially correct |
1286 ms |
1784 KB |
Output is partially correct |
6 |
Partially correct |
1122 ms |
1716 KB |
Output is partially correct |
7 |
Partially correct |
3665 ms |
1740 KB |
Output is partially correct |
8 |
Partially correct |
5962 ms |
2024 KB |
Output is partially correct |
9 |
Partially correct |
5505 ms |
1872 KB |
Output is partially correct |
10 |
Partially correct |
5902 ms |
1756 KB |
Output is partially correct |
11 |
Partially correct |
6052 ms |
1912 KB |
Output is partially correct |
12 |
Partially correct |
6306 ms |
1804 KB |
Output is partially correct |
13 |
Partially correct |
5991 ms |
1908 KB |
Output is partially correct |
14 |
Partially correct |
6326 ms |
1848 KB |
Output is partially correct |
15 |
Partially correct |
3412 ms |
1824 KB |
Output is partially correct |
16 |
Partially correct |
7812 ms |
1860 KB |
Output is partially correct |
17 |
Partially correct |
1517 ms |
1852 KB |
Output is partially correct |
18 |
Partially correct |
1629 ms |
1868 KB |
Output is partially correct |
19 |
Partially correct |
1698 ms |
1772 KB |
Output is partially correct |
20 |
Partially correct |
1814 ms |
1700 KB |
Output is partially correct |
21 |
Partially correct |
1666 ms |
1764 KB |
Output is partially correct |
22 |
Partially correct |
1690 ms |
1864 KB |
Output is partially correct |
23 |
Partially correct |
2707 ms |
1908 KB |
Output is partially correct |
24 |
Correct |
13 ms |
1744 KB |
Output is correct |
25 |
Correct |
13 ms |
1748 KB |
Output is correct |
26 |
Correct |
14 ms |
1676 KB |
Output is correct |
27 |
Correct |
15 ms |
1704 KB |
Output is correct |
28 |
Correct |
13 ms |
1832 KB |
Output is correct |
29 |
Correct |
23 ms |
1840 KB |
Output is correct |
30 |
Correct |
59 ms |
1752 KB |
Output is correct |