# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
154627 | ivandasfs | 사육제 (CEOI14_carnival) | C++14 | 24 ms | 424 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <map>
using namespace std;
int par[155];
int pref[155];
map <int, int> M;
int find(int x) {
if (x == par[x]) return x;
return par[x] = find(par[x]);
}
void merge(int x, int y) {
x = find(x);
y = find(y);
if (x == y) return ;
if (rand()%2) par[x] = y;
else par[y] = x;
}
bool check(int l, int pos) {
int x, y;
printf("%d ", pos-l);
for (int i=l ; i<pos ; i++) {
printf("%d ", i+1);
}
cout <<endl;
scanf("%d", &x);
printf("%d ", pos-l+1);
for (int i=l ; i<=pos ; i++) {
printf("%d ", i+1);
}
cout <<endl;
scanf("%d", &y);
if (x==y) return true;
return false;
}
int main() {
int n;
scanf("%d", &n);
for (int i=0 ; i<n ; i++) {
par[i] = i;
}
pref[0] = 1;
for (int i=1 ; i<n ; i++) {
printf("%d ", i+1);
for (int j=0 ; j<=i ; j++) {
printf("%d ", j+1);
}
cout <<endl;
int x;
scanf("%d", &x);
pref[i] = x;
if (x == pref[i-1] + 1) continue;
int l = 0;
int jump = 256;
for ( ; jump ; jump/=2) {
int pos = l + jump;
if (pos >= i) continue;
if (check(pos, i)) {
l = pos;
}
}
merge(l, i);
}
int f = 1;
printf("0 ");
for (int i=0 ; i<n ; i++) {
if (!M[find(i)]) {
M[find(i)]=f;
f++;
}
printf("%d ", M[find(i)]);
}
cout <<endl;
return 0;
}
컴파일 시 표준 에러 (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... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |