# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
56406 | WA_TLE | Scales (IOI15_scales) | C++14 | 4 ms | 876 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 "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
*/
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |