Submission #1034567

#TimeUsernameProblemLanguageResultExecution timeMemory
1034567vjudge1Scales (IOI15_scales)C++17
55.56 / 100
1 ms436 KiB
#include "scales.h"
#include <bits/stdc++.h>
using namespace std;
void init(int T) {
    /* ... */
}

int ans[6];

void orderCoins() {
    deque<int>g1{1,2,3},g2{4,5,6};
    int min1=getLightest(1,2,3);
    for(int i=0;i<3;i++){
        if(g1[i]==min1)swap(g1[i],g1[0]);
    }
    int min2=getLightest(4,5,6);
    for(int i=0;i<3;i++){
        if(g2[i]==min2)swap(g2[i],g2[0]);
    }
    ans[0]=getLightest(g1[0],g2[0],g1[1]);
    bool g2sort=1;
    int ind=1;
    if(g1[0]==ans[0])g1.pop_front();
    else g2.pop_front();
    while(g1.size()||g2.size()){
        if(g2.size()<g1.size())swap(g1,g2);
        if(g2.size()==3){
            if(!g1.size()){
                ans[ind++]=g2.front();
                g2.pop_front();
            }else if(g1.size()==1){
                int maxi=getHeaviest(g1[0],g2[1],g2[2]);
                ans[5]=maxi;
                if(maxi==g1[0])g1.clear();
                else{
                    if(maxi==g2[1])swap(g2[1],g2[2]);
                    g2.pop_back();
                }
            }else{
                vector<int>toask;
                for(int i:g1)toask.push_back(i);
                for(int i=0;i<3&&toask.size()<3;i++){
                    toask.push_back(g2[i]);
                }
                int mini=getLightest(toask[0],toask[1],toask[2]);
                ans[ind++]=mini;
                if(mini==g1.front())g1.pop_front();
                else if(mini==g1.back())g1.pop_back();
                else g2.pop_front(),g2sort=0;
            }
        }else if(g1.size()+g2.size()==4){
            int mini=getLightest(g1[0],g1[1],g2[0]);
            bool b=mini!=g2[0];
            if(b&&mini==g1[1])swap(g1[0],g1[1]);
            int minmin=getLightest(mini,mini==g1[0]?g1[1]:g1[0],g2[1]);
            ans[ind++]=minmin;
            if(b&&minmin!=mini)ans[ind++]=mini;
            for(int i=0;i<ind;i++){
                if(g1[0]==ans[i]){
                    g1.pop_front();
                    break;
                }
            }
            for(int i=0;i<ind;i++){
                if(g1[1]==ans[i]){
                    g1.pop_back();
                    break;
                }
            }
            for(int i=0;i<ind;i++){
                if(g2[0]==ans[i]){
                    g2.pop_front();
                    break;
                }
            }
            for(int i=0;i<ind;i++){
                if(g2[1]==ans[i]){
                    g2.pop_back();
                    break;
                }
            }
        }else if(g1.size()+g2.size()==3){
            int mini=getLightest(g1[0],g2[0],g2[1]);
            ans[ind++]=mini;
            if(mini==g1[0])g1.clear();
            if(mini==g2[0])g2.pop_front();
            if(mini==g2[1])g2.pop_back();
        }else{
            vector<int>toask{ans[0]};
            for(int i:g1)toask.push_back(i);
            for(int i:g2)toask.push_back(i);
            int maxi=getHeaviest(toask[0],toask[1],toask[2]);
            ans[ind++]=maxi==toask[1]?toask[2]:toask[1];
            ans[ind++]=maxi;
            break;
        }
    }
    answer(ans);
}

Compilation message (stderr)

scales.cpp: In function 'void init(int)':
scales.cpp:4:15: warning: unused parameter 'T' [-Wunused-parameter]
    4 | void init(int T) {
      |           ~~~~^
scales.cpp: In function 'void orderCoins()':
scales.cpp:21:10: warning: variable 'g2sort' set but not used [-Wunused-but-set-variable]
   21 |     bool g2sort=1;
      |          ^~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...