이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "Anna.h"
#include<bits/stdc++.h>
//#pragma GCC optimize("unroll-loops")
using namespace std;
#define ll long long
//#define int ll
#define ull unsigned long long
#define ld long double
#define rep(a) rep1(i,a)
#define rep1(i,a) rep2(i,0,a)
#define rep2(i,b,a) for(int i=(b); i<((int)(a)); i++)
#define rep3(i,b,a) for(int i=(b); i>=((int)(a)); i--)
#define all(a) a.begin(),a.end()
#define pii pair<int,int>
#define pb push_back
//#define inf 1010000000
#define inf 4000000000000000000
#define sz(a) ((int)a.size())
#define pow2(x) (1ll<<(x))
#ifdef i_am_noob
#define bug(...) cerr << "#" << __LINE__ << ' ' << #__VA_ARGS__ << "- ", _do(__VA_ARGS__)
template<typename T> void _do(T && x) {cerr << x << endl;}
template<typename T, typename ...S> void _do(T && x, S&&...y) {cerr << x << ", "; _do(y...);}
#else
#define bug(...) 826
#endif
namespace {
int n,l,r,res;
int zck;
const int K=201;
vector<int> vec1,vec2;
vector<bool> tree1,tree2;
bool flag;
vector<int> build(vector<bool>& tree){
vector<int> stk;
vector<int> pre;
int cur=0;
for(auto i: tree){
if(i){
pre.pb(sz(stk)?stk.back():-1);
stk.pb(cur);
cur++;
}
else{
stk.pop_back();
}
}
return pre;
}
void response(vector<int> id, vector<int> pre, vector<int>& vec){
int L,R;
rep(sz(id)) if(id[i]>=l){
L=i;
break;
}
rep3(i,sz(id)-1,0) if(id[i]<=r){
R=i;
break;
}
if(sz(id)<100) for(auto i: id) bug(i);
bug(L,R);
vector<int> tmp1;
rep(K) tmp1.pb(sz(id)/K);
rep(sz(id)%K) tmp1[i]++;
int lpos,rpos,cur=0,y;
rep(K){
if(tmp1[i]+cur>L){
lpos=i;
break;
}
cur+=tmp1[i];
}
cur=0;
rep(K){
if(tmp1[i]+cur>R){
rpos=i;
break;
}
cur+=tmp1[i];
}
if(rpos<=lpos+1){
SendA(0);
flag=0;
int z=lpos;
rep(8) SendA(z&1),z>>=1;
cur=0;
rep(lpos) cur+=tmp1[i];
rep(tmp1[lpos]) vec.pb(id[cur+i]);
if(lpos+1<sz(tmp1)) rep(tmp1[lpos+1]) vec.pb(id[cur+tmp1[lpos]+i]);
if(sz(vec)<100) for(auto i: vec) bug(i);
return;
}
rep2(i,lpos+1,rpos) if(pre[i]<lpos+1) y=i;
SendA(1);
flag=1;
int z=y;
rep(8) SendA(z&1),z>>=1;
cur=0;
rep(pre[y]) cur+=tmp1[i];
if(pre[y]>=0) rep(tmp1[pre[y]]) vec.pb(id[cur+i]);
bug(pre[y],y);
bug("A",sz(vec));
vec.pb(-1);
rep2(i,y+1,sz(pre)) if(pre[i]<y){
bug(i);
cur=0;
rep1(j,i) cur+=tmp1[j];
rep1(j,tmp1[i]) vec.pb(id[cur+j]);
break;
}
bug("A",sz(vec));
}
} // namespace
void InitA(int N, int L, int R) {
n=N,l=L,r=R;
}
void ReceiveA(bool x) {
if(!zck){
static int cnt=2*K;
tree1.pb(x);
cnt--;
if(cnt<=0){
vector<int> tmp;
rep(n) tmp.pb(i);
vector<int> pre=build(tree1);
response(tmp,pre,vec1);
zck++;
}
}
else if(zck==1){
if(flag){
static int cnt=20,pos=0;
pos+=x*(1<<(20-cnt));
cnt--;
if(!cnt){
for(auto& i: vec1) if(i==-1) i=pos;
flag=0;
}
}
else{
static int cnt=2*K;
tree2.pb(x);
cnt--;
if(cnt<=0){
vector<int> pre=build(tree2);
response(vec1,pre,vec2);
bug(sz(vec1),sz(vec2));
zck++;
}
}
}
else{
if(flag){
static int cnt=20,pos=0;
pos+=x*(1<<(20-cnt));
cnt--;
if(!cnt){
for(auto& i: vec2) if(i==-1) i=pos;
flag=0;
}
}
else{
static int cnt=2*sz(vec2);
tree2.pb(x);
cnt--;
if(cnt<=0){
vector<int> pre=build(tree2);
rep3(i,sz(vec2)-1,0) if(vec2[i]<=r&&(pre[i]==-1||vec2[pre[i]]<l)){
res=vec2[i];
break;
}
}
}
}
}
int Answer() {
bug(res,sz(vec1),sz(vec2));
return res;
}
#include "Bruno.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
//#define int ll
#define ull unsigned long long
#define ld long double
#define rep(a) rep1(i,a)
#define rep1(i,a) rep2(i,0,a)
#define rep2(i,b,a) for(int i=(b); i<((int)(a)); i++)
#define rep3(i,b,a) for(int i=(b); i>=((int)(a)); i--)
#define all(a) a.begin(),a.end()
#define pii pair<int,int>
#define pb push_back
#define inf 1010000000
//#define inf 4000000000000000000
#define sz(a) ((int)a.size())
#define pow2(x) (1ll<<(x))
#ifdef i_am_noob
#define bug(...) cerr << "#" << __LINE__ << ' ' << #__VA_ARGS__ << "- ", _do(__VA_ARGS__)
template<typename T> void _do(T && x) {cerr << x << endl;}
template<typename T, typename ...S> void _do(T && x, S&&...y) {cerr << x << ", "; _do(y...);}
#else
#define bug(...) 826
#endif
namespace {
int n;
int zck;
bool flag;
vector<int> a,vec1,vec2,minvec;
const int K=201;
vector<bool> build(vector<int>& vec){
vector<bool> res;
vector<int> stk;
for(auto i: vec){
while(sz(stk)&&i<stk.back()) res.pb(0),stk.pop_back();
res.pb(1),stk.pb(i);
}
rep(sz(stk)) res.pb(0);
assert(sz(res)==2*sz(vec));
return res;
}
vector<int> Get(vector<int>& id, int val){
vector<int> tmp1;
rep(K) tmp1.pb(sz(id)/K);
rep(sz(id)%K) tmp1[i]++;
int cur;
vector<int> res;
if(sz(id)<100) for(auto i: id) bug(i);
if(flag){
bug(sz(id));
cur=0;
rep(val) cur+=tmp1[i];
int minn=n+1,minid;
rep2(i,cur,cur+tmp1[val]) if(a[id[i]]<minn) minn=a[id[i]],minid=id[i];
int z=minid;
rep(20) SendB(z&1),z>>=1;
rep3(i,val-1,0) if(minvec[i]<minvec[val]){
cur=0;
rep1(j,i) cur+=tmp1[j];
rep2(j,cur,cur+tmp1[i]) res.pb(id[j]);
bug(i);
break;
}
bug("B",sz(res));
res.pb(minid);
bug(val);
rep2(i,val+1,sz(minvec)) if(minvec[i]<minvec[val]){
bug(i);
cur=0;
rep1(j,i) cur+=tmp1[j];
rep2(j,cur,cur+tmp1[i]) res.pb(id[j]);
break;
}
bug("B",sz(res));
}
else{
cur=0;
rep(val) cur+=tmp1[i];
rep2(i,cur,cur+tmp1[val]) res.pb(id[i]);
if(val+1<sz(tmp1)) rep2(i,cur+tmp1[val],cur+tmp1[val]+tmp1[val+1]) res.pb(id[i]);
if(sz(res)<100) for(auto i: res) bug(i);
}
return res;
}
vector<bool> tree1,tree2;
} // namespace
void InitB(int N, vector<int> A) {
n=N,a=A;
vector<int> tmp1;
rep(K) tmp1.pb(n/K);
rep(n%K) tmp1[i]++;
int cur=0;
rep(K){
int minn=inf;
rep2(j,cur,cur+tmp1[i]) minn=min(minn,a[j]);
minvec.pb(minn);
cur+=tmp1[i];
}
tree1=build(minvec);
bug(sz(tree1));
for(auto i: tree1) SendB(i);
}
void ReceiveB(bool y) {
if(!zck){
flag=y;
zck++;
}
else if(zck==1){
static int cnt=8,val=0;
val+=y*(1<<(8-cnt));
cnt--;
if(!cnt){
vector<int> tmp,tmp1;
rep(n) tmp.pb(i);
vec1=Get(tmp,val);
rep(K) tmp1.pb(sz(vec1)/K);
rep(sz(vec1)%K) tmp1[i]++;
minvec.clear();
int cur=0;
rep(K){
int minn=inf;
rep2(j,cur,cur+tmp1[i]) minn=min(minn,a[j]);
minvec.pb(minn);
cur+=tmp1[i];
}
tree2=build(minvec);
bug(sz(tree2));
for(auto i: tree2) SendB(i);
zck++;
}
}
else if(zck==2){
flag=y;
zck++;
}
else{
static int cnt=8,val=0;
val+=y*(1<<(8-cnt));
cnt--;
if(!cnt){
vec2=Get(vec1,val);
minvec.clear();
for(auto i: vec2) minvec.pb(a[i]);
tree2=build(minvec);
bug(sz(tree2),sz(vec1),sz(vec2));
for(auto i: tree2) SendB(i);
zck++;
}
}
}
컴파일 시 표준 에러 (stderr) 메시지
Anna.cpp: In function 'void {anonymous}::response(std::vector<int>, std::vector<int>, std::vector<int>&)':
Anna.cpp:26:18: warning: statement has no effect [-Wunused-value]
26 | #define bug(...) 826
| ^~~
Anna.cpp:65:36: note: in expansion of macro 'bug'
65 | if(sz(id)<100) for(auto i: id) bug(i);
| ^~~
Anna.cpp:65:29: warning: unused variable 'i' [-Wunused-variable]
65 | if(sz(id)<100) for(auto i: id) bug(i);
| ^
Anna.cpp:26:18: warning: statement has no effect [-Wunused-value]
26 | #define bug(...) 826
| ^~~
Anna.cpp:66:5: note: in expansion of macro 'bug'
66 | bug(L,R);
| ^~~
Anna.cpp:26:18: warning: statement has no effect [-Wunused-value]
26 | #define bug(...) 826
| ^~~
Anna.cpp:95:42: note: in expansion of macro 'bug'
95 | if(sz(vec)<100) for(auto i: vec) bug(i);
| ^~~
Anna.cpp:95:34: warning: unused variable 'i' [-Wunused-variable]
95 | if(sz(vec)<100) for(auto i: vec) bug(i);
| ^
Anna.cpp:26:18: warning: statement has no effect [-Wunused-value]
26 | #define bug(...) 826
| ^~~
Anna.cpp:106:5: note: in expansion of macro 'bug'
106 | bug(pre[y],y);
| ^~~
Anna.cpp:26:18: warning: statement has no effect [-Wunused-value]
26 | #define bug(...) 826
| ^~~
Anna.cpp:107:5: note: in expansion of macro 'bug'
107 | bug("A",sz(vec));
| ^~~
Anna.cpp:26:18: warning: statement has no effect [-Wunused-value]
26 | #define bug(...) 826
| ^~~
Anna.cpp:110:9: note: in expansion of macro 'bug'
110 | bug(i);
| ^~~
Anna.cpp:26:18: warning: statement has no effect [-Wunused-value]
26 | #define bug(...) 826
| ^~~
Anna.cpp:116:5: note: in expansion of macro 'bug'
116 | bug("A",sz(vec));
| ^~~
Anna.cpp: In function 'void ReceiveA(bool)':
Anna.cpp:26:18: warning: statement has no effect [-Wunused-value]
26 | #define bug(...) 826
| ^~~
Anna.cpp:155:17: note: in expansion of macro 'bug'
155 | bug(sz(vec1),sz(vec2));
| ^~~
Anna.cpp: In function 'int Answer()':
Anna.cpp:26:18: warning: statement has no effect [-Wunused-value]
26 | #define bug(...) 826
| ^~~
Anna.cpp:186:5: note: in expansion of macro 'bug'
186 | bug(res,sz(vec1),sz(vec2));
| ^~~
Anna.cpp: In function 'void {anonymous}::response(std::vector<int>, std::vector<int>, std::vector<int>&)':
Anna.cpp:70:9: warning: 'lpos' may be used uninitialized in this function [-Wmaybe-uninitialized]
70 | int lpos,rpos,cur=0,y;
| ^~~~
Anna.cpp:109:25: warning: 'y' may be used uninitialized in this function [-Wmaybe-uninitialized]
109 | rep2(i,y+1,sz(pre)) if(pre[i]<y){
| ^~
Anna.cpp:12:37: warning: 'rpos' may be used uninitialized in this function [-Wmaybe-uninitialized]
12 | #define rep2(i,b,a) for(int i=(b); i<((int)(a)); i++)
| ^
Anna.cpp:70:14: note: 'rpos' was declared here
70 | int lpos,rpos,cur=0,y;
| ^~~~
Anna.cpp:72:9: warning: 'L' may be used uninitialized in this function [-Wmaybe-uninitialized]
72 | if(tmp1[i]+cur>L){
| ^~
Anna.cpp:80:9: warning: 'R' may be used uninitialized in this function [-Wmaybe-uninitialized]
80 | if(tmp1[i]+cur>R){
| ^~
Bruno.cpp: In function 'std::vector<int> {anonymous}::Get(std::vector<int>&, int)':
Bruno.cpp:25:18: warning: statement has no effect [-Wunused-value]
25 | #define bug(...) 826
| ^~~
Bruno.cpp:54:36: note: in expansion of macro 'bug'
54 | if(sz(id)<100) for(auto i: id) bug(i);
| ^~~
Bruno.cpp:54:29: warning: unused variable 'i' [-Wunused-variable]
54 | if(sz(id)<100) for(auto i: id) bug(i);
| ^
Bruno.cpp:25:18: warning: statement has no effect [-Wunused-value]
25 | #define bug(...) 826
| ^~~
Bruno.cpp:56:9: note: in expansion of macro 'bug'
56 | bug(sz(id));
| ^~~
Bruno.cpp:25:18: warning: statement has no effect [-Wunused-value]
25 | #define bug(...) 826
| ^~~
Bruno.cpp:67:13: note: in expansion of macro 'bug'
67 | bug(i);
| ^~~
Bruno.cpp:25:18: warning: statement has no effect [-Wunused-value]
25 | #define bug(...) 826
| ^~~
Bruno.cpp:70:9: note: in expansion of macro 'bug'
70 | bug("B",sz(res));
| ^~~
Bruno.cpp:25:18: warning: statement has no effect [-Wunused-value]
25 | #define bug(...) 826
| ^~~
Bruno.cpp:72:9: note: in expansion of macro 'bug'
72 | bug(val);
| ^~~
Bruno.cpp:25:18: warning: statement has no effect [-Wunused-value]
25 | #define bug(...) 826
| ^~~
Bruno.cpp:74:13: note: in expansion of macro 'bug'
74 | bug(i);
| ^~~
Bruno.cpp:25:18: warning: statement has no effect [-Wunused-value]
25 | #define bug(...) 826
| ^~~
Bruno.cpp:80:9: note: in expansion of macro 'bug'
80 | bug("B",sz(res));
| ^~~
Bruno.cpp:25:18: warning: statement has no effect [-Wunused-value]
25 | #define bug(...) 826
| ^~~
Bruno.cpp:87:42: note: in expansion of macro 'bug'
87 | if(sz(res)<100) for(auto i: res) bug(i);
| ^~~
Bruno.cpp:87:34: warning: unused variable 'i' [-Wunused-variable]
87 | if(sz(res)<100) for(auto i: res) bug(i);
| ^
Bruno.cpp: In function 'void InitB(int, std::vector<int>)':
Bruno.cpp:25:18: warning: statement has no effect [-Wunused-value]
25 | #define bug(...) 826
| ^~~
Bruno.cpp:111:5: note: in expansion of macro 'bug'
111 | bug(sz(tree1));
| ^~~
Bruno.cpp: In function 'void ReceiveB(bool)':
Bruno.cpp:25:18: warning: statement has no effect [-Wunused-value]
25 | #define bug(...) 826
| ^~~
Bruno.cpp:139:13: note: in expansion of macro 'bug'
139 | bug(sz(tree2));
| ^~~
Bruno.cpp:25:18: warning: statement has no effect [-Wunused-value]
25 | #define bug(...) 826
| ^~~
Bruno.cpp:157:13: note: in expansion of macro 'bug'
157 | bug(sz(tree2),sz(vec1),sz(vec2));
| ^~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |