#include <bits/stdc++.h>
#include <vector>
#include "library.h"
using namespace std;
#define vi vector<int>
#define pb push_back
int n;
struct sub
{
vi a;
sub(int x)
{
a = {x};
}
sub() {}
};
vector<sub> ar;
int query(vi x)
{
vi ret(n, 0);
for (auto u : x)
ret[u] = 1;
return Query(ret);
}
bool belong(sub x, int y)
{
x.a.pb(y);
return query(x.a) == 1;
}
bool direction(sub x, int u)
{
vi tmp;
tmp.pb(x.a.back());
tmp.pb(u);
return query(tmp) == 1;
}
void merge(sub &x, int y)
{
vi ve = x.a;
ve.pb(y);
if (query(ve) == 1)
{
x.a.pb(y);
}
else
{
vi add = {y};
x.a.insert(x.a.end(), add.begin(), add.end());
}
}
void Solve(int N)
{
n = N;
vi tmp(N, 0);
int comp = 0;
for (int i = 0; i < N; ++i)
{
tmp[i] = 1;
int y = Query(tmp);
if (y == comp + 1)
{
ar.pb(sub(i));
}
else if (y == comp)
{
for (auto &u : ar)
{
if (belong(u, i))
{
merge(u, i);
break;
}
}
}
else
{
vi nei;
for (int j = 0; j < (int)ar.size(); ++j)
{
if (belong(ar[j], i))
{
nei.pb(j);
}
}
sub ret;
if (!direction(ar[nei[0]], i))
{
reverse(ar[nei[0]].a.begin(), ar[nei[0]].a.end());
}
if (direction(ar[nei[1]], i))
reverse(ar[nei[1]].a.begin(), ar[nei[1]].a.end());
ret.a.insert(ret.a.end(), ar[nei[0]].a.begin(), ar[nei[0]].a.end());
ret.a.pb(i);
ret.a.insert(ret.a.end(), ar[nei[1]].a.begin(), ar[nei[1]].a.end());
vector<sub> nar;
for (int j = 0; j < (int)ar.size(); ++j)
{
if (j == nei[0] || j == nei[1])
continue;
nar.pb(ar[j]);
}
nar.pb(ret);
ar = nar;
// solve2();
}
comp = y;
}
// for (auto u : ar)
// {
// for (auto v : u.a)
// cout << v << " ";
// cout << "\n";
// }
for (auto &u : ar[0].a)
++u;
Answer(ar[0].a);
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
50 ms |
364 KB |
Wrong Answer [8] |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
50 ms |
364 KB |
Wrong Answer [8] |
2 |
Halted |
0 ms |
0 KB |
- |