제출 #1262125

#제출 시각아이디문제언어결과실행 시간메모리
1262125JuanJL저울 (IOI15_scales)C++20
0 / 100
918 ms589824 KiB
#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) {
    /* ... */
    p1 = {1,2,3};
    p2 = {4,5,6};
    forn(i,0,6) lleft[i]=rright[i]=-5;
    res.clear();
}

void orderCoins() {
    /* ... */
    
    
    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 timeMemoryGrader output
Fetching results...