Submission #249004

# Submission time Handle Problem Language Result Execution time Memory
249004 2020-07-14T02:07:11 Z kai824 Unscrambling a Messy Bug (IOI16_messy) C++17
100 / 100
3 ms 512 KB
#include "messy.h"
#include "bits/stdc++.h"
using namespace std;

#define mkp make_pair
map<pair<int,int>,vector<int> > mp;
vector<int> tmp,tmp2;
vector<int> restore_permutation(int n, int w, int r) {//length n, rest don't matter
  string s="";
  for(int x=0;x<n;x++)s+="1";
  int n2=n;//current set where you need find which parts is left half and which parts is right half...
  while(n2>1){
    for(int i=0;i<n;i+=n2){
      for(int j=0;j<n2;j++){
        s[i+j]='0';
      }
      for(int j=0;j<n2/2;j++){
        s[i+j]='1';
        //cout<<s<<'\n';
        add_element(s);
        s[i+j]='0';
      }
      for(int j=0;j<n2;j++){
        s[i+j]='1';
      }
    }
    n2/=2;
  }
  compile_set();
  n2=n;
  for(int x=0;x<n;x++)tmp.push_back(x);
  mp[mkp(0,n-1)]=tmp;
  while(n2>1){
    for(int i=0;i<n;i+=n2){
      tmp.clear();tmp2.clear();
      for(int j=0;j<mp[mkp(i,i+n2-1)].size();j++){
        s[mp[mkp(i,i+n2-1)][j]]='0';
      }
      for(int j=0;j<mp[mkp(i,i+n2-1)].size();j++){
        s[mp[mkp(i,i+n2-1)][j]]='1';
        //cout<<"here:"<<s<<'\n';
        if(check_element(s)){
          tmp.push_back(mp[mkp(i,i+n2-1)][j]);//left half
        }else tmp2.push_back(mp[mkp(i,i+n2-1)][j]);//right half...
        s[mp[mkp(i,i+n2-1)][j]]='0';
      }
      mp[mkp(i,i+(n2/2)-1)]=tmp;
      mp[mkp(i+(n2/2),i+n2-1 )]=tmp2;
      for(int j=0;j<mp[mkp(i,i+n2-1)].size();j++){
        s[mp[mkp(i,i+n2-1)][j]]='1';
      }
    }
    n2/=2;
  }
  //check_element("0");
  vector<int> ans;
  for(int x=0;x<n;x++)ans.push_back(0);
  for(auto it=mp.begin();it!=mp.end();it++){
    if(it->first.first==it->first.second){
      if(it->second.size()==0){
        //cerr<<"LEGIT BEEG GAYY SIAH!!\n";
      }
      //ans[it->first.first]=it->second[0];
      ans[it->second[0]]=it->first.first;
    }
  }
  return ans;
}

/*
4 100 100
2 1 3 0
*/

Compilation message

messy.cpp: In function 'std::vector<int> restore_permutation(int, int, int)':
messy.cpp:36:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for(int j=0;j<mp[mkp(i,i+n2-1)].size();j++){
                   ~^~~~~~~~~~~~~~~~~~~~~~~~~
messy.cpp:39:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for(int j=0;j<mp[mkp(i,i+n2-1)].size();j++){
                   ~^~~~~~~~~~~~~~~~~~~~~~~~~
messy.cpp:49:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for(int j=0;j<mp[mkp(i,i+n2-1)].size();j++){
                   ~^~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 256 KB n = 8
2 Correct 0 ms 256 KB n = 8
3 Correct 0 ms 256 KB n = 8
4 Correct 0 ms 256 KB n = 8
5 Correct 0 ms 256 KB n = 8
6 Correct 0 ms 256 KB n = 8
7 Correct 0 ms 384 KB n = 8
8 Correct 0 ms 256 KB n = 8
9 Correct 0 ms 256 KB n = 8
10 Correct 1 ms 256 KB n = 8
11 Correct 0 ms 256 KB n = 8
12 Correct 0 ms 256 KB n = 8
13 Correct 0 ms 256 KB n = 8
14 Correct 0 ms 256 KB n = 8
15 Correct 0 ms 256 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB n = 32
2 Correct 1 ms 384 KB n = 32
3 Correct 1 ms 384 KB n = 32
4 Correct 1 ms 384 KB n = 32
5 Correct 1 ms 384 KB n = 32
6 Correct 1 ms 384 KB n = 32
7 Correct 0 ms 384 KB n = 32
8 Correct 0 ms 384 KB n = 32
9 Correct 1 ms 384 KB n = 32
10 Correct 1 ms 384 KB n = 32
11 Correct 1 ms 384 KB n = 32
12 Correct 1 ms 384 KB n = 32
13 Correct 0 ms 384 KB n = 32
14 Correct 1 ms 384 KB n = 32
15 Correct 1 ms 384 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB n = 32
2 Correct 0 ms 384 KB n = 32
3 Correct 0 ms 384 KB n = 32
4 Correct 1 ms 384 KB n = 32
5 Correct 1 ms 384 KB n = 32
6 Correct 1 ms 384 KB n = 32
7 Correct 1 ms 384 KB n = 32
8 Correct 1 ms 384 KB n = 32
9 Correct 1 ms 384 KB n = 32
10 Correct 1 ms 384 KB n = 32
11 Correct 1 ms 384 KB n = 32
12 Correct 1 ms 384 KB n = 32
13 Correct 1 ms 384 KB n = 32
14 Correct 1 ms 384 KB n = 32
15 Correct 1 ms 384 KB n = 32
# Verdict Execution time Memory Grader output
1 Correct 2 ms 512 KB n = 128
2 Correct 2 ms 512 KB n = 128
3 Correct 2 ms 512 KB n = 128
4 Correct 3 ms 512 KB n = 128
5 Correct 2 ms 512 KB n = 128
6 Correct 2 ms 512 KB n = 128
7 Correct 2 ms 512 KB n = 128
8 Correct 2 ms 512 KB n = 128
9 Correct 2 ms 512 KB n = 128
10 Correct 2 ms 512 KB n = 128
11 Correct 2 ms 512 KB n = 128
12 Correct 2 ms 512 KB n = 128
13 Correct 2 ms 512 KB n = 128
14 Correct 2 ms 512 KB n = 128
15 Correct 2 ms 512 KB n = 128
# Verdict Execution time Memory Grader output
1 Correct 2 ms 512 KB n = 128
2 Correct 2 ms 512 KB n = 128
3 Correct 2 ms 512 KB n = 128
4 Correct 2 ms 512 KB n = 128
5 Correct 2 ms 512 KB n = 128
6 Correct 2 ms 512 KB n = 128
7 Correct 2 ms 512 KB n = 128
8 Correct 2 ms 512 KB n = 128
9 Correct 2 ms 512 KB n = 128
10 Correct 2 ms 512 KB n = 128
11 Correct 2 ms 512 KB n = 128
12 Correct 2 ms 512 KB n = 128
13 Correct 2 ms 512 KB n = 128
14 Correct 2 ms 512 KB n = 128
15 Correct 2 ms 512 KB n = 128