Submission #189058

#TimeUsernameProblemLanguageResultExecution timeMemory
189058PedroBigManUnscrambling a Messy Bug (IOI16_messy)C++14
70 / 100
4 ms632 KiB
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include "messy.h"
using namespace std;
typedef int ll;
typedef unsigned long long int ull;
typedef long double ld;
#define REP(i,a,b) for(ll i=a; i<b; i++)
#define pb push_back
#define mp make_pair
#define pl pair<ll,ll>
#define ff first
#define ss second
#define INF 100000000000000000LL
ll insig;
#define In(vecBRO, LENBRO) REP(IBRO,0,LENBRO) {cin>>insig; vecBRO.pb(insig);}
void Out(vector<ll> x) {REP(i,0,x.size()) {cout<<x[i]<<" ";} cout<<endl;}

string rever(string s)
{
    string ans="";
    REP(i,0,s.size())
    {
        if(s[i]=='1') {ans+='0';}
        else {ans+='1';}
    }
    return ans;
}

vector<int> restore_permutation(int n, int w, int r) 
{
    ll N=(ll) n;
    ll b=(ll) log2(n);
    vector<vector<string> > bits;
    vector<string> xx; REP(i,0,b) {bits.pb(xx);}
    ll curm=(1LL<<b); string base=""; REP(i,0,N) {base+="0";}
    REP(i,0,b)
    {
        base[i]='1';
        REP(j,b,N) 
        {
            if((j%curm)<curm/2) {base[j]='1';bits[i].pb(base);base[j]='0';}
        }
        curm/=2;
        base[i]='0';
    }
    REP(i,0,b)
    {
        base[i]='1';
        add_element(rever(base));
    }
    REP(i,0,b) {REP(j,0,bits[i].size()) {add_element(bits[i][j]);}}
    compile_set();
    vector<ll> p; REP(i,0,N) {p.pb(0LL);}
    REP(i,0,N) {base[i]='0';}
    vector<ll> indic;
    REP(i,0,b)
    {
        REP(j,0,N)
        {
            bool al=false;
            REP(z,0,indic.size()) {if(indic[z]==j) {al=true;}}
            if(al) {continue;}
            base[j]='1';
            if(check_element(rever(base)))
            {
                indic.pb(j);break;
            }
            base[j]='0';
        }
    }
    REP(i,0,N) {base[i]='0';}
    REP(i,0,b) {p[indic[i]]=i;}
    REP(i,0,N)
    {
        if(find(indic.begin(),indic.end(),i)!=indic.end()) {continue;}
        base[i]='1';
        REP(j,0,b)
        {
            base[indic[j]]='1';
            if(!check_element(base))
            {
                p[i]+=(1LL<<(b-j-1));
            }
            base[indic[j]]='0';
        }
        base[i]='0';
    }
    return p;
}

Compilation message (stderr)

messy.cpp: In function 'void Out(std::vector<int>)':
messy.cpp:15:33: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define REP(i,a,b) for(ll i=a; i<b; i++)
messy.cpp:24:29:
 void Out(vector<ll> x) {REP(i,0,x.size()) {cout<<x[i]<<" ";} cout<<endl;}
                             ~~~~~~~~~~~~
messy.cpp:24:25: note: in expansion of macro 'REP'
 void Out(vector<ll> x) {REP(i,0,x.size()) {cout<<x[i]<<" ";} cout<<endl;}
                         ^~~
messy.cpp: In function 'std::__cxx11::string rever(std::__cxx11::string)':
messy.cpp:15:33: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define REP(i,a,b) for(ll i=a; i<b; i++)
messy.cpp:29:9:
     REP(i,0,s.size())
         ~~~~~~~~~~~~             
messy.cpp:29:5: note: in expansion of macro 'REP'
     REP(i,0,s.size())
     ^~~
messy.cpp: In function 'std::vector<int> restore_permutation(int, int, int)':
messy.cpp:15:33: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define REP(i,a,b) for(ll i=a; i<b; i++)
messy.cpp:59:21:
     REP(i,0,b) {REP(j,0,bits[i].size()) {add_element(bits[i][j]);}}
                     ~~~~~~~~~~~~~~~~~~
messy.cpp:59:17: note: in expansion of macro 'REP'
     REP(i,0,b) {REP(j,0,bits[i].size()) {add_element(bits[i][j]);}}
                 ^~~
messy.cpp:15:33: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define REP(i,a,b) for(ll i=a; i<b; i++)
messy.cpp:69:17:
             REP(z,0,indic.size()) {if(indic[z]==j) {al=true;}}
                 ~~~~~~~~~~~~~~~~ 
messy.cpp:69:13: note: in expansion of macro 'REP'
             REP(z,0,indic.size()) {if(indic[z]==j) {al=true;}}
             ^~~
#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...