# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
136930 | amiratou | 저울 (IOI15_scales) | C++14 | 4 ms | 504 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "scales.h"
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
vector<vector<int> > vec;
void init(int T) {
vec.resize(720);
vector<int> perm={1,2,3,4,5,6};
int idx=0;
do{
vec[idx++]=perm;
}while(next_permutation(perm.begin(),perm.end()));
}
int gnl(vector<int> G,int a,int b,int c,int d){
int idx=0,j=-1;
for (int i = 1; i < 6; ++i)
if(G[i]==d){idx=i;break;}
for (int i = idx+1; i < 6; ++i)
if(G[i]==a||G[i]==b||G[i]==c){j=i;break;}
if(j==-1)
for (int i = 0; i < 6; ++i)
if(G[i]==a||G[i]==b||G[i]==c)return G[i];
return G[j];
}
void orderCoins() {
bool valid[720];
memset(valid,1,sizeof valid);
vector<int> ans;
int W[6],A[3],B[3],C[3],D[3];
int q=getLightest(1,2,3),q2=getHeaviest(1,2,3);
A[0]=q,A[2]=q2,A[1]=6-q-q2;
q=getLightest(4,5,6),q2=getHeaviest(4,5,6);
B[0]=q,B[2]=q2,B[1]=15-q-q2;
q=getMedian(A[0],A[2],B[0]),q2=getMedian(A[1],B[1],B[2]);
C[1]=q;
if(q==A[0])C[2]=A[2],C[0]=B[0];
else if(q==A[2])C[0]=A[0],C[2]=B[0];
else C[0]=A[0],C[2]=A[2];
D[1]=q2;
if(q2==B[1])D[0]=A[1],D[2]=B[2];
else if(q2==A[1])D[0]=B[1],D[2]=B[2];
else D[0]=B[1],D[2]=A[1];
int ask1=getNextLightest(A[0],A[1],A[2],B[2]),ask2=getNextLightest(B[0],B[1],B[2],A[2]);
for (int i = 0; i <720; ++i)
{
int tab[3];
for (int z = 0; z < 3; ++z)
for (int j = 0; j < 6; ++j)
if(A[z]==vec[i][j]){tab[z]=j;break;}
for (int z = 1; z < 3; ++z)
if(tab[z]<tab[z-1]){valid[i]=0;break;}
if(!valid[i])continue;
for (int z = 0; z < 3; ++z)
for (int j = 0; j < 6; ++j)
if(B[z]==vec[i][j]){tab[z]=j;break;}
for (int z = 1; z < 3; ++z)
if(tab[z]<tab[z-1]){valid[i]=0;break;}
if(!valid[i])continue;
for (int z = 0; z < 3; ++z)
for (int j = 0; j < 6; ++j)
if(C[z]==vec[i][j]){tab[z]=j;break;}
for (int z = 1; z < 3; ++z)
if(tab[z]<tab[z-1]){valid[i]=0;break;}
if(!valid[i])continue;
for (int z = 0; z < 3; ++z)
for (int j = 0; j < 6; ++j)
if(D[z]==vec[i][j]){tab[z]=j;break;}
for (int z = 1; z < 3; ++z)
if(tab[z]<tab[z-1]){valid[i]=0;break;}
if(!valid[i])continue;
if(gnl(vec[i],A[0],A[1],A[2],B[2])!=ask1||gnl(vec[i],B[0],B[1],B[2],A[2])!=ask2)valid[i]=0;
}
for (int i = 0; i < 720; ++i)
{
if(!valid[i])continue;
for (int j = 0;j < 6; j++)
W[j]=vec[i][j];
break;
}
answer(W);
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |