답안 #621066

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
621066 2022-08-03T11:41:41 Z mdn2002 정렬하기 (IOI15_sorting) C++14
0 / 100
512 ms 26876 KB
#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 r;
        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

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 ++ )
      |               ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Incorrect 0 ms 340 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Incorrect 0 ms 340 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 280 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Incorrect 2 ms 1236 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Incorrect 0 ms 340 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 512 ms 26876 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 512 ms 26876 KB Output isn't correct
2 Halted 0 ms 0 KB -