# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
125738 | Nodir_Bobiev | Unscrambling a Messy Bug (IOI16_messy) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
# include <iostream>
# include <vector>
# include <algorithm>
using namespace std;
vector < string > vc;
vector < int > tri[128][130], p = {0,3,5,1,2,7,4,6};
string zeros, ones;
/*
void add_element( string s )
{
string nw;
for( auto c: p ){
nw += s[c];
}
vc.push_back( nw );
}
void print_elements()
{
for( auto c: vc ){
cout << c << endl;
}
}
bool check_element( string s )
{
for( auto c: vc ){
if( c == s ){
return true;
}
}
return false;
}
*/
void rec( int i, int j )
{
if( j == 1 )
return;
string ss = ones;
for( auto c: tri[i][j] )ss[c] = '0';
for( auto c: tri[i][j] ){
string s = ss;
s[c] = '1';
if( check_element( s ) ){
tri[i][j/2].push_back( c );
}else{
tri[i+j/2][j/2].push_back( c );
}
}
rec( i, j/2 );
rec( i+j/2, j/2);
}
vector <int> restor_permutation( int n, int w, int r )
{
for( int i = 0; i < n; i ++ ){
zeros += '0';
ones += '1';
}
for( int i = 2; i <= n; i *= 2 ){
for( int j = 0; j < n; j += i ){
string s = zeros;
for( int k = 0; k < j; k ++ ) s[k] = '1';
for( int k=j+i; k < n; k ++ ) s[k] = '1';
for( int k = j; k<j+i/2; k ++ ){
s[k] = '1';
add_element( s );
s[k] = '0';
}
}
}
for( int i = 0; i < n; i ++ )
tri[0][n].push_back( i );
rec( 0, n );
vector < pair < int, int > > st;
for( int i = 0; i < n; i ++ ){
st.push_back( make_pair( tri[i][1][0], i ) );
}
sort( st.begin(), st.end() );
vector < int > ret;
for( auto c: st ){
ret.push_back( c.second );
}
return ret;
}
/*
int main()
{
vector < int > ans;
ans = restor_permutation( 8,8,8 );
for( auto c: ans ){
cout << c << ' ';
}
return 0;
}
*/