# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
876272 | danikoynov | Super Dango Maker (JOI22_dango3) | C++17 | 159 ms | 832 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 random_shuffle(vector < int > &d)
{
for (int i = 0; i < d.size(); i ++)
{
swap(d[i], d[rng() % d.size()]);
}
}
void sub_solve(vector < int > &d)
{
for (int step = 0; step < m; step ++)
{
random_shuffle(d);
int lf = 0, rf = (int)(d.size()) - 1;
while(lf <= rf)
{
int mf = (lf + rf) / 2;
vector < int > ch;
for (int i = 0; i < mf; i ++)
ch.push_back(d[i]);
if (Query(ch) > 0)
rf = mf - 1;
else
lf = mf + 1;
}
vector < int > secure, trash;
vector < int > cur;
for (int i = 0; i <= rf; i ++)
cur.push_back(d[i]);
while(cur.size() > 0)
{
int bk = cur.back();
cur.pop_back();
if (get_query(cur, secure) > 0)
trash.push_back(bk);
else
secure.push_back(bk);
}
Answer(secure);
vector < int > new_vec;
for (int el : trash)
new_vec.push_back(el);
for (int i = rf + 1; i < d.size(); i ++)
new_vec.push_back(d[i]);
d = new_vec;
}
}
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);
}
컴파일 시 표준 에러 (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... |