# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
876260 | danikoynov | Super Dango Maker (JOI22_dango3) | C++17 | 289 ms | 636 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "dango3.h"
#include <bits/stdc++.h>
using namespace std;
int get_query(vector < int > lf, vector < int > rf)
{
for (int cur : rf)
lf.push_back(cur);
return Query(lf);
}
mt19937 rng;
int n, m;
void sub_solve(vector < int > &d)
{
if (Query(d) == 0)
return;
vector < int > df;
while(true)
{
vector < int > lf, rf;
for (int i = 0; i < d.size(); i ++)
{
if (rng() % 2 == 0)
lf.push_back(d[i]);
else
rf.push_back(d[i]);
}
sub_solve(lf);
sub_solve(rf);
if (lf.size() + rf.size() > 4 * n && get_query(lf, rf) > 1)
{
d = lf;
for (int cur : rf)
d.push_back(cur);
continue;
}
for (int cur : lf)
df.push_back(cur);
for (int cur : rf)
df.push_back(cur);
break;
}
int cnt = Query(df);
for (int t = 0; t < cnt; t++)
{
vector < int > secure, trash;
while(!df.empty() && secure.size() < n)
{
int bk = df.back();
df.pop_back();
if (get_query(df, secure) == 0)
secure.push_back(bk);
else
trash.push_back(bk);
}
Answer(secure);
for (int cur : trash)
df.push_back(cur);
}
d = df;
}
void Solve(int N, int M)
{
n = N;
m = M;
vector < int > d;
for (int i = 1; i <= N * M; i ++)
d.push_back(i);
sub_solve(d);
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |