Submission #1285018

#TimeUsernameProblemLanguageResultExecution timeMemory
1285018Faisal_SaqibUnscrambling a Messy Bug (IOI16_messy)C++17
49 / 100
2 ms356 KiB
// #pragma once

#include <bits/stdc++.h>
using namespace std;
void add_element(std::string x);
bool check_element(std::string x);
void compile_set();

std::vector<int> restore_permutation(int n, int w, int r)
{
    // vector<int> ord;
    // for(int i=0;i<n;i++)
    // {
    //     ord.push_back(i);
    // }
    // random_shuffle(begin(ord),end(ord));
    string s(n,'0');
    vector<pair<int,string>> st;
    for(int i=0;i<n;i++)
    {
        s[i]='1';
        st.push_back({1,s});
        s[i]='0';
    }

    for(int i=0;i+1<n;i++)
    {
        s[i]='1';
        // s[ord[i]]='1';
        add_element(s);
    }
    compile_set();
    for(int i=0;i<n;i++)
    {
        s[i]='0';
    }
    // for(int m=1;m+1<(1<<n);m++) // exclude last
    // {
    //     string t;
    //     for(int i=0;i<n;i++)t+=char('0'+((m>>i)&1));
    //     int cnt=0;
    //     for(auto j:t)
    //     {
    //         if(j=='1')
    //         {
    //             cnt++;
    //         }
    //     }
    //     st.push_back({cnt,t});
    // }
    // sort(begin(st),end(st));

    vector<int> p(n+1,-1),done(n+2,0); // p[i] where i-th bit go
    set<int> cur;
    int as=0,askp=0;
    // for(auto typ:st)
    // cout<<"POS: ";
    // for(auto x:st)cout<<x.second<<' ';
    // cout<<endl;
    for(int tkp=0;tkp<st.size();tkp++)
    {
        auto typ=st[tkp];
        string t=typ.second;
        // if(done[typ.first])continue;
        askp++;
        if(check_element(t))
        {
            // cout<<"Found: ";
            // cout<<t<<endl;
            for(int k=0;k<n;k++)
            {
                if(t[k]!='1')continue;
                if(cur.find(k)==cur.end())
                {
                    // cout<<"As go : "<<as<<' '<<k<<endl;
                    p[as]=k;
                    cur.insert(k);
                    break;
                }
            }
            st.clear();
            s[p[as]]='1';
            for(int j=0;j<n;j++)
            {
                if(s[j]=='0')
                {
                    s[j]='1';
                    st.push_back({as+2,s});
                    s[j]='0';
                }
            }
            random_shuffle(begin(st),end(st));
            // cout<<"POS: ";
            // for(auto x:st)cout<<x.second<<' ';
            // cout<<endl;
            tkp=-1;
            as++;
        }
    }
    // cout<<"REad: ";
    // cout<<askp<<endl;
    vector<int> q(n,-1);
    for(int i=0;i<n;i++)
    {
        if(p[i]!=-1)
        {
            q[p[i]]=i;
        }
    }
    for(int i=0;i<n;i++)
    {
        if(q[i]==-1)
        {
            q[i]=n-1;
        }
    }
    return q;
}

Compilation message (stderr)

messy.cpp: In function 'std::vector<int> restore_permutation(int, int, int)':
messy.cpp:92:27: warning: 'void std::random_shuffle(_RAIter, _RAIter) [with _RAIter = __gnu_cxx::__normal_iterator<pair<int, __cxx11::basic_string<char> >*, vector<pair<int, __cxx11::basic_string<char> > > >]' is deprecated: use 'std::shuffle' instead [-Wdeprecated-declarations]
   92 |             random_shuffle(begin(st),end(st));
      |             ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/13/algorithm:61,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:51,
                 from messy.cpp:3:
/usr/include/c++/13/bits/stl_algo.h:4581:5: note: declared here
 4581 |     random_shuffle(_RandomAccessIterator __first, _RandomAccessIterator __last)
      |     ^~~~~~~~~~~~~~
messy.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
messy_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...