제출 #299672

#제출 시각아이디문제언어결과실행 시간메모리
299672mohamedsobhi777저울 (IOI15_scales)C++14
38.46 / 100
1 ms384 KiB
#include "scales.h"
#include<bits/stdc++.h>

using namespace std ; 

int Te ; 


void init(int T) {
        Te = T ;
    /* ... */
}

void orderCoins() {
    /* ... */
        int W[6] = {0,0,0,0,0,0} ; 
        int it = 0 ; 
        vector<int> perm[2] ; 
        perm[0] = { getLightest(1 , 2 , 3) , getMedian(1 , 2, 3) } ;
        perm[0].push_back(6 - perm[0][0] - perm[0][1]) ;

        perm[1] = { getLightest(4 , 5 , 6) , getMedian(4 , 5, 6) } ;
        perm[1].push_back(15 - perm[1][0] - perm[1][1]) ;

        int answer1 = getNextLightest(perm[0][0] , perm[0][1] , perm[1][1] , perm[1][0] ) ; 

/*
        cout<< perm[0][0] <<" " << perm[0][1] <<" " << perm[1][1] <<" " << perm[1][0] <<" "<< answer1 <<"**\n"; 

        for(auto u : perm[0])
                cout<< u<<" " ;
        cout<<"\n" ; 
        for(auto u : perm[1])
                cout<< u <<" "; 
*/
       // answer(W) ; 
        if(answer1 == perm[1][1] && 0 ){
                W[0] = perm[0][0] ; 
                W[1] = perm[0][1] ; 
                W[2] = perm[1][0] ; 
                W[3] = perm[1][1] ; 
                W[4] = getMedian(W[0] , perm[0][2] , perm[1][2]) ; 
                W[5] = 21 - accumulate(W , W + 5 , 0) ; 
                for(int i = 0 ; i < 6 ;i++)
                        cout<< W[i] <<"." ; 
                int rem[6] ; 
                for(int i = 0 ;i < 6 ;i++){
                        rem[W[i] -1] = i + 1;
                }
                answer(rem) ;
        }else if(answer1 == perm[0][1]){
                W[0] = perm[0][0] ; 
                W[1] = perm[1][0] ; 
                W[2] = perm[0][1] ; 
                int md = getMedian(perm[0][2] , perm[1][1], perm[1][2]) ;
                W[4] = md ;
                if(md == perm[0][2]){
                        W[3] = perm[1][1] ; 
                        W[5] = perm[1][2] ;
                }else if(md == perm[1][1]){
                        W[3] = perm[0][2] ; 
                        W[5] = perm[1][2] ;
                }else{
                        W[3] = perm[1][1] ; 
                        W[5] = perm[0][2] ; 
                }
        }else if(answer1 == perm[0][0]){
                W[0] = perm[1][0] ;
                W[1] = perm[0][0] ; 

                int gmd = getMedian(perm[0][2] , perm[1][1] , perm[1][2]) ; 

                if(gmd == perm[0][2]){
                        W[5] = perm[1][2] ;
                        int gmd2 = getMedian(perm[0][1] , perm[0][2] , perm[1][1]) ; 
                        if(gmd2 == perm[0][1]){
                                W[2] = perm[1][1] ;  
                                W[3] = perm[0][1] ; 
                                W[4] = perm[0][2] ; 
                        }else if(gmd2 == perm[0][2]){
                                W[2] = perm[0][1] ;   
                                W[3] = perm[0][2] ;    
                                W[4] = perm[1][1] ; 

                        }else{
                                W[2] = perm[0][1] ;  
                                W[3] = perm[1][1] ; 
                                W[4] = perm[0][2] ; 
                        }
                }else if(gmd == perm[1][2]){

                        W[5] = perm[0][2] ;
                        int gmd2 = getMedian(perm[0][1] , perm[1][2] , perm[1][1]) ; 
                        if(gmd2 == perm[0][1]){
                                W[2] = perm[1][1] ;  
                                W[3] = perm[0][1] ; 
                                W[4] = perm[1][2] ; 

                        }else if(gmd2 == perm[1][1]){
                                W[2] = perm[0][1] ;   
                                W[3] = perm[1][1] ;    
                                W[4] = perm[1][2] ; 
                           //     cout<<"*";

                        }else{
                                W[2] = perm[1][1] ;  
                                W[3] = perm[1][2] ; 
                                W[4] = perm[0][1] ; 
                        }
                }else{
                        W[2] = perm[0][1] ; 
                        W[3] = perm[0][2] ; 
                        W[4] = perm[1][1] ; 
                        W[5] = perm[1][2] ; 
                }
        }else{ 
                int i = 0 , j = 0 ; 
                while( (i < 2 || j < 2) && max(i, j) < 3 ){
                        vector<int> quest = {perm[0][i] , perm[1][j]} ;
                        if(i < 2)quest.push_back(perm[0][i+1]) ; 
                        else quest.push_back(perm[1][j+1]) ;

                        int ans = getLightest(quest[0] , quest[1] , quest[2]) ;
                        W[it++] = ans ; 
                        if(ans == perm[0][i])
                                i++ ; 
                        else j++ ; 
                }

                vector<int> rem ;
                int ii = i ; 
                int ij = j ;
                while(i < 3)rem.push_back(perm[0][i++]) ; 
                while(j < 3)rem.push_back(perm[1][j++]) ;

                if(ii == 3 || ij == 3){
                        for(int r = 0 ; r < (int) rem.size() ;r++)
                                W[it++] = rem[r] ;
                }else{
                        int ans = getMedian(W[0], rem[0] , rem[1]) ; 
                        W[it++] = ans ;
                        W[it++] = 21 - accumulate(W , W + 5 , 0);
                }
        }
        answer(W);
}
#Verdict Execution timeMemoryGrader output
Fetching results...