Submission #886683

# Submission time Handle Problem Language Result Execution time Memory
886683 2023-12-12T16:15:22 Z HuyQuang_re_Zero Scales (IOI15_scales) C++14
0 / 100
27 ms 1104 KB
#include <bits/stdc++.h>
#define db long double
#define II pair <ll,ll>
#define III pair <ll,II>
#define IV pair <vector <int>,vector <int> >
#define TII pair <treap*,treap*>
#define fst first
#define snd second
#define BIT(x,i) ((x>>i)&1)
#define pi acos(-1)
#define to_radian(x) (x*pi/180.0)
#define to_degree(x) (x*180.0/pi)
#define Log(x) (31-__builtin_clz((int)x))
#define LogLL(x) (63-__builtin_clzll((ll)x))
#include "scales.h"
using namespace std;
/*
struct Interactive
{
    int a[7]={ 0,3,4,6,2,1,5 };
    int Query(int type,int A,int B,int C,int D)
    {
        int val[4]={ 0,a[A],a[B],a[C] };
        sort(val+1,val+4);
        int k;
        if(type<=3) k=val[type];
        else if(val[3]<a[D]) k=val[1];
        else
        {
            for(int i=3;i>=1;i--)
                if(val[i]>a[D]) k=val[i];
        }
        if(a[A]==k) return A;
        if(a[B]==k) return B;
        if(a[C]==k) return C;
    }

} IR;
int getLightest(int A,int B,int C) { return IR.Query(1,A,B,C,0); }
int getMedian(int A,int B,int C) { return IR.Query(2,A,B,C,0); }
int getHeaviest(int A,int B,int C) { return IR.Query(3,A,B,C,0); }
int getNextLightest(int A,int B,int C,int D) { return IR.Query(4,A,B,C,D); }
void answer(int w[])
{
    for(int i=0;i<6;i++) cout<<w[i]<<" ";
}
*/
struct query { int type,A,B,C,D; };
vector <query> query_set;
map <vector <vector <int> >,query> opt;
int limit[6]={ 243,81,27,9,3,1 };
vector <vector <int> > Set;
int Encode_answer(vector <int> a,query q)
{
    int val[4]={ 0,a[q.A-1],a[q.B-1],a[q.C-1] };
    sort(val+1,val+4);
    int k;
    if(q.type<=3) k=val[q.type];
    else if(val[3]<a[q.D-1]) k=val[1];
    else
    {
        for(int i=3;i>=1;i--)
            if(val[i]>a[q.D-1]) k=val[i];
    }
    if(a[q.A-1]==k) return 0;
    if(a[q.B-1]==k) return 1;
    if(a[q.C-1]==k) return 2;
}


bool check(vector <vector <int> > Set,int step)
{
    if(Set.size()<2) return 1;
    for(query q:query_set)
    {
        vector <vector <int> > split[3];
        for(vector <int> x:Set)
            split[Encode_answer(x,q)].push_back(x);
        int lim=min(limit[step],(int)Set.size()-1);
        if(split[0].size()<=lim && split[1].size()<=lim && split[2].size()<=lim)
        {
            if(check(split[0],step+1) && check(split[1],step+1) && check(split[2],step+1))
            {
                opt[Set]=q;
                return 1;
            }
        }
    }
    return 0;
}
void init(int k)
{
    for(int type=1;type<=4;type++)
        for(int i=1;i<=6;i++)
            for(int j=i+1;j<=6;j++)
                for(int k=j+1;k<=6;k++)
                    if(type<4) query_set.push_back({ type,i,j,k,0 });
                    else
                        for(int h=1;h<=6;h++)
                            if(h!=i && h!=j && h!=k)
                                query_set.push_back({ type,i,j,k,h });
    vector <int> vec;
    for(int i=1;i<=6;i++) vec.push_back(i);
    do
    {
        Set.push_back(vec);
    }
    while(next_permutation(vec.begin(),vec.end()));
    check(Set,0);
}




vector <int> solve(vector <vector <int> > Set)
{
    if(Set.size()==1) return Set[0];
    query q=opt[Set];
    vector <vector <int> > split[3];
    for(vector <int> x:Set)
        split[Encode_answer(x,q)].push_back(x);
    int ok,num;
    if(q.type==1) ok=getLightest(q.A,q.B,q.C);
    if(q.type==2) ok=getMedian(q.A,q.B,q.C);
    if(q.type==3) ok=getHeaviest(q.A,q.B,q.C);
    if(q.type==4) ok=getNextLightest(q.A,q.B,q.C,q.D);
    if(ok==q.A) num=0;
    if(ok==q.B) num=1;
    if(ok==q.C) num=2;
    return solve(split[num]);
}
void orderCoins()
{
    vector <int> vec=solve(Set);
    int w[6];
    for(int i=0;i<6;i++) w[i]=vec[i];
    answer(w);
}
/*
int main()
{
    freopen("scales.inp","r",stdin);
    freopen("scales.out","w",stdout);
    init(0);
    orderCoins();
}
*/

Compilation message

scales.cpp: In function 'bool check(std::vector<std::vector<int> >, int)':
scales.cpp:71:35: warning: declaration of 'Set' shadows a global declaration [-Wshadow]
   71 | bool check(vector <vector <int> > Set,int step)
      |            ~~~~~~~~~~~~~~~~~~~~~~~^~~
scales.cpp:52:24: note: shadowed declaration is here
   52 | vector <vector <int> > Set;
      |                        ^~~
scales.cpp:80:27: warning: comparison of integer expressions of different signedness: 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   80 |         if(split[0].size()<=lim && split[1].size()<=lim && split[2].size()<=lim)
      |            ~~~~~~~~~~~~~~~^~~~~
scales.cpp:80:51: warning: comparison of integer expressions of different signedness: 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   80 |         if(split[0].size()<=lim && split[1].size()<=lim && split[2].size()<=lim)
      |                                    ~~~~~~~~~~~~~~~^~~~~
scales.cpp:80:75: warning: comparison of integer expressions of different signedness: 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   80 |         if(split[0].size()<=lim && split[1].size()<=lim && split[2].size()<=lim)
      |                                                            ~~~~~~~~~~~~~~~^~~~~
scales.cpp: In function 'void init(int)':
scales.cpp:96:25: warning: declaration of 'int k' shadows a parameter [-Wshadow]
   96 |                 for(int k=j+1;k<=6;k++)
      |                         ^
scales.cpp:91:15: note: shadowed declaration is here
   91 | void init(int k)
      |           ~~~~^
scales.cpp:91:15: warning: unused parameter 'k' [-Wunused-parameter]
scales.cpp: In function 'std::vector<int> solve(std::vector<std::vector<int> >)':
scales.cpp:115:43: warning: declaration of 'Set' shadows a global declaration [-Wshadow]
  115 | vector <int> solve(vector <vector <int> > Set)
      |                    ~~~~~~~~~~~~~~~~~~~~~~~^~~
scales.cpp:52:24: note: shadowed declaration is here
   52 | vector <vector <int> > Set;
      |                        ^~~
scales.cpp: In function 'int Encode_answer(std::vector<int>, query)':
scales.cpp:68:1: warning: control reaches end of non-void function [-Wreturn-type]
   68 | }
      | ^
scales.cpp:66:5: warning: 'k' may be used uninitialized in this function [-Wmaybe-uninitialized]
   66 |     if(a[q.B-1]==k) return 1;
      |     ^~
scales.cpp: In function 'std::vector<int> solve(std::vector<std::vector<int> >)':
scales.cpp:128:5: warning: 'ok' may be used uninitialized in this function [-Wmaybe-uninitialized]
  128 |     if(ok==q.B) num=1;
      |     ^~
# Verdict Execution time Memory Grader output
1 Incorrect 19 ms 856 KB Output isn't correct
2 Incorrect 19 ms 860 KB Output isn't correct
3 Incorrect 19 ms 860 KB Output isn't correct
4 Incorrect 23 ms 860 KB Output isn't correct
5 Incorrect 21 ms 860 KB Output isn't correct
6 Incorrect 19 ms 848 KB Output isn't correct
7 Incorrect 20 ms 704 KB Output isn't correct
8 Incorrect 19 ms 852 KB Output isn't correct
9 Incorrect 20 ms 860 KB Output isn't correct
10 Incorrect 19 ms 852 KB Output isn't correct
11 Incorrect 19 ms 856 KB Output isn't correct
12 Incorrect 19 ms 692 KB Output isn't correct
13 Incorrect 19 ms 760 KB Output isn't correct
14 Incorrect 19 ms 856 KB Output isn't correct
15 Incorrect 25 ms 864 KB Output isn't correct
16 Incorrect 19 ms 860 KB Output isn't correct
17 Incorrect 20 ms 852 KB Output isn't correct
18 Incorrect 19 ms 848 KB Output isn't correct
19 Incorrect 19 ms 852 KB Output isn't correct
20 Incorrect 19 ms 856 KB Output isn't correct
21 Incorrect 19 ms 860 KB Output isn't correct
22 Incorrect 19 ms 856 KB Output isn't correct
23 Incorrect 19 ms 860 KB Output isn't correct
24 Incorrect 19 ms 756 KB Output isn't correct
25 Incorrect 19 ms 704 KB Output isn't correct
26 Incorrect 19 ms 860 KB Output isn't correct
27 Incorrect 19 ms 692 KB Output isn't correct
28 Incorrect 19 ms 852 KB Output isn't correct
29 Incorrect 19 ms 712 KB Output isn't correct
30 Incorrect 19 ms 756 KB Output isn't correct
31 Incorrect 19 ms 860 KB Output isn't correct
32 Incorrect 27 ms 876 KB Output isn't correct
33 Incorrect 19 ms 856 KB Output isn't correct
34 Incorrect 19 ms 848 KB Output isn't correct
35 Incorrect 19 ms 852 KB Output isn't correct
36 Incorrect 19 ms 872 KB Output isn't correct
37 Incorrect 19 ms 1104 KB Output isn't correct
38 Incorrect 19 ms 852 KB Output isn't correct
39 Incorrect 19 ms 860 KB Output isn't correct
40 Incorrect 19 ms 864 KB Output isn't correct