제출 #856401

#제출 시각아이디문제언어결과실행 시간메모리
856401LucaIlieUnscrambling a Messy Bug (IOI16_messy)C++17
70 / 100
1 ms604 KiB
#include "messy.h" #include <bits/stdc++.h> using namespace std; string s0, s1, s; vector<int> ans; void divide1( int l, int r, int x ) { if ( l > r ) return; int mid = (l + r) / 2; for ( int i = l; i <= mid; i++ ) { s = s0; s[x] = s[mid] = s[i] = '1'; add_element( s ); } divide1( l, mid - 1, mid ); divide1( mid + 1, r, mid ); } void divide2( int l, int r, int x, vector<int> v ) { if ( l > r ) return; /*printf( "%d %d\n", l, r ); for ( int i: v ) cout << i << " "; printf( "\n" );*/ if ( l == r ) { ans[l] = v[0]; return; } int mid = (l + r) / 2; int p = -1; for ( int i: v ) { s = s0; s[x] = s[i] = '1'; if ( check_element( s ) ) p = i; } ans[mid] = p; //printf( "%d\n", p ); vector<int> leftt, rightt; for ( int i: v ) { if ( i == p ) continue; s = s0; s[x] = s[p] = s[i] = '1'; if ( check_element( s ) ) leftt.push_back( i ); else rightt.push_back( i ); } divide2( l, mid - 1, p, leftt ); divide2( mid + 1, r, p, rightt ); } vector<int> restore_permutation( int n, int w, int r ) { ans.resize( n ); s0 = s1 = ""; for ( int i = 0; i < n; i++ ) { s0 += '0'; s1 += '1'; } int mid = (0 + n - 1) / 2; divide1( 0, mid - 1, mid ); divide1( mid + 1, n - 1, mid ); for ( int i = 0; i < mid; i++ ) { s = s1; s[i] = '0'; add_element( s ); } s = s0; s[mid] = '1'; add_element( s ); compile_set(); int p; vector<int> leftt, rightt; for ( int i = 0; i < n; i++ ) { s = s0; s[i] = '1'; if ( check_element( s ) ) { p = i; continue; } s = s1; s[i] = '0'; if ( check_element( s ) ) leftt.push_back( i ); else rightt.push_back( i ); } divide2( 0, mid - 1, p, leftt ); ans[mid] = p; divide2( mid + 1, n - 1, p, rightt ); vector<int> perm( n ); for ( int i = 0; i < n; i++ ) perm[ans[i]] = i; return perm; }

컴파일 시 표준 에러 (stderr) 메시지

messy.cpp: In function 'std::vector<int> restore_permutation(int, int, int)':
messy.cpp:107:12: warning: 'p' may be used uninitialized in this function [-Wmaybe-uninitialized]
  107 |     divide2( mid + 1, n - 1, p, rightt );
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...