#include "scales.h"
#include <bits/stdc++.h>
#define fst first
#define snd second
#define pb push_back
#define SZ(x) (int)x.size()
#define ALL(x) x.begin(),x.end()
#define forn(i,a,b) for(int i = a; i < b; i++)
#define mset(a,v) memset(a,v,sizeof(a))
#define FIN ios::sync_with_stdio(0); cout.tie(0); cin.tie(0);
using namespace std;
typedef long long ll;
vector<ll> p1;
vector<ll> s1(3);
vector<ll> p2;
vector<ll> s2(3);
vector<ll> lleft(6,-5);
vector<ll> rright(6,-5);
vector<int> res;
ll men, p, ind;
void init(int T) {
/* ... */
}
void orderCoins() {
/* ... */
p1 = {1,2,3};
p2 = {4,5,6};
forn(i,0,6) lleft[i]=rright[i]=-5;
res.clear();
s1[2]=getHeaviest(1,2,3);
s1[1]=getMedian(1,2,3);
p1.erase(find(ALL(p1),s1[2]));
p1.erase(find(ALL(p1),s1[1]));
s1[0]=p1[0];
s2[2]=getHeaviest(4,5,6);
s2[1]=getMedian(4,5,6);
p2.erase(find(ALL(p2),s2[2]));
p2.erase(find(ALL(p2),s2[1]));
s2[0]=p2[0];
forn(i,0,3) lleft[s1[i]-1]=s1[i-1]-1, rright[s1[i]-1]=(i<2?s1[i+1]-1:-1);
men = getLightest(s1[0],s2[0],s2[1]);
if(men==s2[0]){
swap(s1,s2);
}
rright[s2[0]-1] = rright[s1[0]-1];
rright[s1[0]-1]=s2[0]-1;
lleft[s2[0]-1]= s1[0]-1;
lleft[rright[s2[0]-1]]=s2[0]-1;
//cout<<"pasa\n";
forn(i,1,3){
//cout<<s1[0]<<" "<<s1[1]<<" "<<s1[2]<<" "<<s2[i]<<'\n';
p = getNextLightest(s1[0],s1[1],s1[2],s2[i]);
// si es mayor a todos devuelve s1[0] -> se puede detectar si s1[0] es menor que s2[0]
// sino devuelve el menor que sea mayor
if(p==s1[0]){
forn(j,0,6){
if(rright[j]==-1){
rright[j]=s2[i]-1;
lleft[s2[i]-1]=j;
rright[s2[i]-1]=-1;
}
}
}else{
rright[s2[i]-1]=p-1;
lleft[s2[i]-1]=lleft[p-1];
rright[lleft[p-1]]=s2[i]-1;
lleft[p-1]=s2[i]-1;
}
}
//forn(i,0,6) cout<<lleft[i]<<" "<<rright[i]<<'\n';
ind = men-1;
while(ind!=-1){
//cout<<ind+1<<'\n';
res.pb(ind+1);
ind=rright[ind];
}
int W[] = {res[0], res[1], res[2], res[3], res[4], res[5]};
answer(W);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |