Submission #621069

#TimeUsernameProblemLanguageResultExecution timeMemory
621069mdn2002Sorting (IOI15_sorting)C++14
0 / 100
517 ms26876 KiB
#include "sorting.h" #include<bits/stdc++.h> using namespace std; int n , m , a [2003] , aa [2003] , x [20004] , y [20004] , dis [2003][20004]; bool ck ( int xx ) { for ( int i = 1 ; i <= n ; i ++ ) a [i] = aa [i]; int mm = xx; for ( int i = 1 ; i <= n ; i ++ ) dis [i][mm] = i; for ( int j = mm - 1 ; j >= 0 ; j -- ) { for ( int i = 1 ; i <= n ; i ++ ) dis [i][j] = dis [i][ j + 1 ]; swap ( dis [ x [j] ][j] , dis [ y [j] ][j] ); } for ( int i = 1 ; i <= mm ; i ++ ) { int f = 0; for ( int i = 1 ; i <= n ; i ++ ) { if ( a [i] != i ) f = 1; } if ( f == 0 ) return 1; swap ( a [ x [ i - 1 ] ] , a [ y [ i - 1 ] ] ); for ( int j = 1 ; j <= n ; j ++ ) { if ( dis [j][i] != a [j] ) { int wr; for ( int z = 1 ; z <= n ; z ++ ) { if ( a [z] == dis [j][i] ) { wr = z; break; } } swap ( a [j] , a [wr] ); break; } } } int f = 0; for ( int i = 1 ; i <= n ; i ++ ) { if ( a [i] != i ) f = 1; } if ( f == 0 ) return 1; return 0; } int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) { n = N; for ( int i = 1 ; i <= n ; i ++ ) { a [i] = S [ i - 1 ]; a [i] ++; aa [i] = a [i]; } m = M; for ( int i = 0 ; i < m ; i ++ ) { x [i] = X [i] , y [i] = Y [i]; x [i] ++ , y [i] ++; } int l = 0 , r = m + 1 , mid; while ( l < r ) { mid = ( l + r ) / 2; if ( ck ( mid ) ) r = mid; else l = mid + 1; } m = l; for ( int i = 1 ; i <= n ; i ++ ) dis [i][m] = i; for ( int j = m - 1 ; j >= 0 ; j -- ) { for ( int i = 1 ; i <= n ; i ++ ) dis [i][j] = dis [i][ j + 1 ]; swap ( dis [ x [j] ][j] , dis [ y [j] ][j] ); } int rr = 0; for ( int i = 1 ; i <= m ; i ++ ) { int f = 0; for ( int i = 1 ; i <= n ; i ++ ) { if ( a [i] != i ) f = 1; } if ( f == 0 ) return rr; swap ( a [ x [ i - 1 ] ] , a [ y [ i - 1 ] ] ); P [ i - 1 ] = -1 , Q [ i - 1 ] = -1; for ( int j = 1 ; j <= n ; j ++ ) { if ( dis [j][i] != a [j] ) { int wr; for ( int z = 1 ; z <= n ; z ++ ) { if ( a [z] == dis [j][i] ) { wr = z; break; } } P [ i - 1 ] = j - 1 , Q [ i - 1 ] = wr - 1; swap ( a [j] , a [wr] ); rr ++; break; } } if ( P [ i - 1 ] == -1 ) { P [ i - 1 ] = 0; Q [ i - 1 ] = 0; rr ++; } } return rr; }

Compilation message (stderr)

sorting.cpp: In function 'bool ck(int)':
sorting.cpp:20:19: warning: declaration of 'i' shadows a previous local [-Wshadow]
   20 |         for ( int i = 1 ; i <= n ; i ++ )
      |                   ^
sorting.cpp:17:15: note: shadowed declaration is here
   17 |     for ( int i = 1 ; i <= mm ; i ++ )
      |               ^
sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:86:19: warning: declaration of 'i' shadows a previous local [-Wshadow]
   86 |         for ( int i = 1 ; i <= n ; i ++ )
      |                   ^
sorting.cpp:83:15: note: shadowed declaration is here
   83 |     for ( int i = 1 ; i <= m ; i ++ )
      |               ^
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...