# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
56406 | WA_TLE | 저울 (IOI15_scales) | C++14 | 4 ms | 876 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "scales.h"
void init(int T) {}
void orderCoins(void){
int i;
//7回をできた。
//まずは4つを3回の天秤で
//1個加える
//1個加える
//getMedianマジ有用 文字数短いしマジ神
//NextLightestは何のためにうまれてきたのだろうか?
int ma=getMedian(1,2,3);
int ans[6]={0};//とりあえず4つ決定する
ans[0]=getLightest(1+(ma%3),1+((1+ma)%3),4);
if(ans[0]==4){
ans[0]=4;
ans[1]=getLightest(1,2,3);
ans[2]=ma;
ans[3]=(ans[1]^ans[2]);//ビット演算で3つの内違うものを選んでいる
}else{
int tg=(ma^ans[0]);//tgはans[0]でもmaでもない方
//ここでans[0]<ma<tgがわかっているのに注意
ans[2]=getMedian(ma,4,tg);
if(ans[2]==ma){ans[1]=4; ans[3]=tg;}
if(ans[2]==4) {ans[1]=ma;ans[3]=tg;}
if(ans[2]==tg){ans[1]=ma;ans[3]=4; }
}
//ここで4つがわかった あとはこれに挿入(意味深)する
int ke=getMedian(ans[0],ans[3],5);
if(ke==ans[0]){
for(i=4;i>0;i--){ans[i]=ans[i-1];}
ans[0]=5;
}else if(ke==ans[3]){
ans[4]=5;
}else{
ke=getMedian(ans[1],ans[2],5);
if(ke==ans[1]){
for(i=4;i>1;i--){ans[i]=ans[i-1];}
ans[1]=5;
}else if(ke==5){
for(i=4;i>2;i--){ans[i]=ans[i-1];}
ans[2]=5;
}else{
for(i=4;i>3;i--){ans[i]=ans[i-1];}
ans[3]=5;
}
}
int ka=getMedian(ans[1],ans[3],6);
int ku;
if(ka==ans[1]){
ku=getLightest(ans[0],ans[1],6);
if(ku==6){for(i=5;i>0;i--){ans[i]=ans[i-1];}ans[0]=6;}
else{for(i=5;i>1;i--){ans[i]=ans[i-1];}ans[1]=6;}
}else if(ka==6){
ku=getLightest(ans[2],ans[3],6);
if(ku==6){for(i=5;i>2;i--){ans[i]=ans[i-1];}ans[2]=6;}
else{for(i=5;i>3;i--){ans[i]=ans[i-1];}ans[3]=6;}
}else{
ku=getMedian(ans[4],ans[0],6);
if(ku==6){for(i=5;i>4;i--){ans[i]=ans[i-1];}ans[4]=6;}
else{ans[5]=6;}
}
answer(ans);
return;
}
/*
4
1 4 3 2 6 5
5 2 1 6 3 4
6 2 3 4 5 1
3 5 6 1 4 2
*/
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |