제출 #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...