#include "scales.h"
#include <bits/stdc++.h>
using namespace std;
int perms[720][7];
int pos[720][7];
int ops[120][4];
int res[120][720];
int exec(int i, int j) {
int o = ops[i][0];
int is[7];
memset(is, 0, sizeof(is));
for(int k=1;k<4;k++) is[pos[j][ops[i][k]]]=k;
if(o<3) {
for(int k=1;k<=6;k++) {
if(is[k]) {
if(!o) return is[k]-1;
--o;
}
}
} else {
o-=3;
int d=0;
int id[7];
memset(id, 0, sizeof(id));
for(int k=1;k<4;k++) id[ops[i][k]]=k;
for(int k=1;k<=6;k++) {
if(!id[k]) {
if(!o) {
d=k;
break;
}
--o;
}
}
d=pos[j][d];
for(int k=d+1;k<=6;k++) {
if(is[k]) return is[k]-1;
}
for(int k=1;k<=6;k++) {
if(is[k]) return is[k]-1;
}
}
return 0;
}
void init(int T) {
int p1[6]={1, 2, 3, 4, 5, 6};
int p2[7];
int p3[7];
int j=0;
do {
for(int i=0;i<6;i++) p2[i+1]=p1[i];
for(int i=1;i<=6;i++) p3[p2[i]]=i;
for(int i=1;i<=6;i++) perms[j][i]=p2[i];
for(int i=1;i<=6;i++) pos[j][i]=p3[i];
++j;
} while(next_permutation(p1, p1+6));
int id=0;
for(int o=0;o<6;o++) {
for(int i=1;i<=6;i++) {
for(int j=i+1;j<=6;j++) {
for(int k=j+1;k<=6;k++) {
ops[id][0]=o;
ops[id][1]=i;
ops[id][2]=j;
ops[id][3]=k;
++id;
}
}
}
}
for(int i=0;i<120;i++) {
for(int j=0;j<720;j++) res[i][j]=exec(i, j);
}
}
int doOp(int i) {
int id[7];
memset(id, 0, sizeof(id));
for(int k=1;k<4;k++) id[ops[i][k]]=k;
int o=ops[i][0], a=ops[i][1], b=ops[i][2], c=ops[i][3];
if(o==0) return id[getLightest(a, b, c)]-1;
if(o==1) return id[getMedian(a, b, c)]-1;
if(o==2) return id[getHeaviest(a, b, c)]-1;
o-=3;
int d=0;
for(int k=1;k<=6;k++) {
if(!id[k]) {
if(!o) {
d=k;
break;
}
--o;
}
}
return id[getNextLightest(a, b, c, d)]-1;
}
void orderCoins() {
int W[6];
vector<int> ps;
for(int i=0;i<720;i++) ps.push_back(i);
while(ps.size()>1) {
int bstI=-1, bstV=1e9;
for(int i=0;i<120;i++) {
int cur[3]={0, 0, 0};
for(auto p : ps) cur[res[i][p]]++;
int curV=0;
for(int i=0;i<3;i++) curV=max(curV, cur[i]);
if(curV<bstV) {
bstV=curV;
bstI=i;
}
}
int v=doOp(bstI);
vector<int> nps;
for(auto p : ps) {
if(res[bstI][p]==v) nps.push_back(p);
}
ps=nps;
}
for(int i=0;i<6;i++) W[i]=perms[ps[0]][i+1];
answer(W);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |