Submission #584822

#TimeUsernameProblemLanguageResultExecution timeMemory
584822krit3379Scales (IOI15_scales)C++17
72.92 / 100
138 ms468 KiB
#include<bits/stdc++.h>
#include "scales.h"
using namespace std;
#define N 100005
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")

struct A{
    int id,i,j,k,l;
}upd;

vector<vector<int>> per;
vector<int> v;

void init(int t){
    v={0,1,2,3,4,5};
    do{
        per.push_back(v);
    }while(next_permutation(v.begin(),v.end()));
}

void orderCoins(){
    int ma,m,m1,m2,i,j,k,l,a,b,c,d,c1,c2,c3,x;
    int ans[6];
    vector<vector<int>> now=per,temp;
    while(now.size()>1){
        ma=2e9;
        //case 1
        for(i=0;i<6;i++)for(j=i+1;j<6;j++)for(k=j+1;k<6;k++){
            c1=c2=c3=0;
            for(auto arr:now){
                a=arr[i],b=arr[j],c=arr[k];
                m=max({a,b,c});
                if(m==a)c1++;
                else if(m==b)c2++;
                else c3++;
            }
            if(max({c1,c2,c3})<=ma)ma=max({c1,c2,c3}),upd={1,i,j,k};
        }
        //case 2
        for(i=0;i<6;i++)for(j=i+1;j<6;j++)for(k=j+1;k<6;k++){
            c1=c2=c3=0;
            for(auto arr:now){
                a=arr[i],b=arr[j],c=arr[k];
                m=min({a,b,c});
                if(m==a)c1++;
                else if(m==b)c2++;
                else c3++;
            }
            if(max({c1,c2,c3})<=ma)ma=max({c1,c2,c3}),upd={2,i,j,k};
        }
        //case 3
        for(i=0;i<6;i++)for(j=i+1;j<6;j++)for(k=j+1;k<6;k++){
            c1=c2=c3=0;
            for(auto arr:now){
                a=arr[i],b=arr[j],c=arr[k];
                m1=min({a,b,c});
                m2=max({a,b,c});
                if(a!=m1&&a!=m2)c1++;
                else if(b!=m1&&b!=m2)c2++;
                else c3++;
            }
            if(max({c1,c2,c3})<=ma)ma=max({c1,c2,c3}),upd={3,i,j,k};
        }
        //case 4
        for(i=0;i<6;i++)for(j=i+1;j<6;j++)for(k=j+1;k<6;k++)for(l=0;l<6;l++){
            if(l==i||l==j||l==k)continue;
            c1=c2=c3=0;
            for(auto arr:now){
                a=arr[i],b=arr[j],c=arr[k],d=arr[l];
                vector<int> t={a,b,c};
                sort(t.begin(),t.end());
                if(arr[l]>t[2]||arr[l]<t[0]){
                    if(a==t[0])c1++;
                    else if(b==t[0])c2++;
                    else c3++;
                }
                else if(arr[l]<t[1]){
                    if(a==t[1])c1++;
                    else if(b==t[1])c2++;
                    else c3++;
                }
                else{
                    if(a==t[2])c1++;
                    else if(b==t[2])c2++;
                    else c3++;
                }
            }
            if(max({c1,c2,c3})<=ma)ma=max({c1,c2,c3}),upd={4,i,j,k,l};
        }
        auto [op,i,j,k,l]=upd;
        if(op==1){
            x=getHeaviest(i+1,j+1,k+1);
            x--;
            for(auto arr:now)if(arr[x]==max({arr[i],arr[j],arr[k]}))temp.push_back(arr);
        }
        else if(op==2){
            x=getLightest(i+1,j+1,k+1);
            x--;
            for(auto arr:now)if(arr[x]==min({arr[i],arr[j],arr[k]}))temp.push_back(arr);
        }
        else if(op==3){
            x=getMedian(i+1,j+1,k+1);
            x--;
            for(auto arr:now)if(arr[x]!=max({arr[i],arr[j],arr[k]})&&arr[x]!=min({arr[i],arr[j],arr[k]}))temp.push_back(arr);
        }
        else{
            x=getNextLightest(i+1,j+1,k+1,l+1);
            x--;
            int sz=0;
            for(auto arr:now){
                int t=1e9;
                if(arr[i]>arr[l])t=min(t,arr[i]);
                if(arr[j]>arr[l])t=min(t,arr[j]);
                if(arr[k]>arr[l])t=min(t,arr[k]);
                if((max({arr[i],arr[j],arr[k]})<arr[l]&&arr[x]==min({arr[i],arr[j],arr[k]}))||arr[x]==t)temp.push_back(arr);
            }
        }
        now=temp;
        temp.clear();
    }
    for(i=0;i<6;i++)ans[now[0][i]]=i+1;
    answer(ans);
}

Compilation message (stderr)

scales.cpp: In function 'void init(int)':
scales.cpp:15:15: warning: unused parameter 't' [-Wunused-parameter]
   15 | void init(int t){
      |           ~~~~^
scales.cpp: In function 'void orderCoins()':
scales.cpp:38:67: warning: missing initializer for member 'A::l' [-Wmissing-field-initializers]
   38 |             if(max({c1,c2,c3})<=ma)ma=max({c1,c2,c3}),upd={1,i,j,k};
      |                                                                   ^
scales.cpp:50:67: warning: missing initializer for member 'A::l' [-Wmissing-field-initializers]
   50 |             if(max({c1,c2,c3})<=ma)ma=max({c1,c2,c3}),upd={2,i,j,k};
      |                                                                   ^
scales.cpp:63:67: warning: missing initializer for member 'A::l' [-Wmissing-field-initializers]
   63 |             if(max({c1,c2,c3})<=ma)ma=max({c1,c2,c3}),upd={3,i,j,k};
      |                                                                   ^
scales.cpp:91:18: warning: declaration of 'i' shadows a previous local [-Wshadow]
   91 |         auto [op,i,j,k,l]=upd;
      |                  ^
scales.cpp:23:20: note: shadowed declaration is here
   23 |     int ma,m,m1,m2,i,j,k,l,a,b,c,d,c1,c2,c3,x;
      |                    ^
scales.cpp:91:20: warning: declaration of 'j' shadows a previous local [-Wshadow]
   91 |         auto [op,i,j,k,l]=upd;
      |                    ^
scales.cpp:23:22: note: shadowed declaration is here
   23 |     int ma,m,m1,m2,i,j,k,l,a,b,c,d,c1,c2,c3,x;
      |                      ^
scales.cpp:91:22: warning: declaration of 'k' shadows a previous local [-Wshadow]
   91 |         auto [op,i,j,k,l]=upd;
      |                      ^
scales.cpp:23:24: note: shadowed declaration is here
   23 |     int ma,m,m1,m2,i,j,k,l,a,b,c,d,c1,c2,c3,x;
      |                        ^
scales.cpp:91:24: warning: declaration of 'l' shadows a previous local [-Wshadow]
   91 |         auto [op,i,j,k,l]=upd;
      |                        ^
scales.cpp:23:26: note: shadowed declaration is here
   23 |     int ma,m,m1,m2,i,j,k,l,a,b,c,d,c1,c2,c3,x;
      |                          ^
scales.cpp:110:17: warning: unused variable 'sz' [-Wunused-variable]
  110 |             int sz=0;
      |                 ^~
scales.cpp:23:34: warning: variable 'd' set but not used [-Wunused-but-set-variable]
   23 |     int ma,m,m1,m2,i,j,k,l,a,b,c,d,c1,c2,c3,x;
      |                                  ^
#Verdict Execution timeMemoryGrader output
Fetching results...