답안 #320711

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
320711 2020-11-09T15:16:36 Z knon0501 정렬하기 (IOI15_sorting) C++14
36 / 100
3 ms 620 KB
#include "sorting.h"
#include <bits/stdc++.h>
using namespace std;
const int MX=2e5+5;
int a[MX];
int b[MX];
int c[MX];
int d[MX];
int dd[MX];
int e[MX];
int p[MX];
int q[MX];
int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
    P[0] = 0;
	Q[0] = 0;
	int i,j,k;

	int ret=N;
	int lef=0;
	int rig=N-1;

	while(rig>=lef){
        int mid=(lef+rig)/2;
        for(i=0 ; i<N ; i++){
            a[i]=b[i]=S[i];
            e[a[i]]=i;
        }
        for(i=0  ; i<mid ; i++){
            swap(b[X[i]],b[Y[i]]);
        }
        for(i=0 ; i<N ; i++)
            c[b[i]]=i;
        for(i=0 ; i<N ; i++)
            d[i]=c[a[i]],dd[c[a[i]]]=i;
        int j=0;
        for(i=0 ; i<mid ; i++){
            swap(dd[d[X[i]]],dd[d[Y[i]]]);
            swap(e[a[X[i]]],e[a[Y[i]]]);

            swap(d[X[i]],d[Y[i]]);
            swap(a[X[i]],a[Y[i]]);
            while(j<N && e[j]==dd[j]){
                j++;

            }
            if(j<N){
                int k=a[dd[j]];
                p[i]=e[j];
                q[i]=dd[j];
                swap(a[e[j]],a[dd[j]]);
                swap(e[j],e[k]);

            }
        }
        int isok=1;
        for(i=0 ; i<N ; i++){
            if(i!=a[i])isok=0;
        }
        if(isok==1){
            rig=mid-1;
            ret=mid;
            for(i=0 ; i<mid ; i++)
            {
                P[i]=p[i];
                Q[i]=q[i];
            }
        }
        else
            lef=mid+1;
	}


	return ret;
}


Compilation message

sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:35:13: warning: declaration of 'j' shadows a previous local [-Wshadow]
   35 |         int j=0;
      |             ^
sorting.cpp:16:8: note: shadowed declaration is here
   16 |  int i,j,k;
      |        ^
sorting.cpp:47:21: warning: declaration of 'k' shadows a previous local [-Wshadow]
   47 |                 int k=a[dd[j]];
      |                     ^
sorting.cpp:16:10: note: shadowed declaration is here
   16 |  int i,j,k;
      |          ^
sorting.cpp:16:8: warning: unused variable 'j' [-Wunused-variable]
   16 |  int i,j,k;
      |        ^
sorting.cpp:16:10: warning: unused variable 'k' [-Wunused-variable]
   16 |  int i,j,k;
      |          ^
sorting.cpp:13:39: warning: unused parameter 'M' [-Wunused-parameter]
   13 | int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
      |                                   ~~~~^
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Correct 1 ms 364 KB Output is correct
10 Correct 1 ms 364 KB Output is correct
11 Correct 1 ms 364 KB Output is correct
12 Correct 1 ms 364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 396 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 384 KB Output is correct
6 Correct 1 ms 364 KB Output is correct
7 Correct 1 ms 364 KB Output is correct
8 Correct 1 ms 364 KB Output is correct
9 Correct 1 ms 364 KB Output is correct
10 Correct 1 ms 364 KB Output is correct
11 Correct 1 ms 364 KB Output is correct
12 Correct 1 ms 364 KB Output is correct
13 Correct 1 ms 396 KB Output is correct
14 Correct 1 ms 364 KB Output is correct
15 Correct 1 ms 364 KB Output is correct
16 Correct 1 ms 364 KB Output is correct
17 Correct 1 ms 364 KB Output is correct
18 Correct 1 ms 364 KB Output is correct
19 Correct 1 ms 364 KB Output is correct
20 Correct 1 ms 364 KB Output is correct
21 Correct 1 ms 620 KB Output is correct
22 Correct 1 ms 620 KB Output is correct
23 Correct 1 ms 620 KB Output is correct
24 Correct 2 ms 620 KB Output is correct
25 Correct 1 ms 620 KB Output is correct
26 Incorrect 1 ms 620 KB Output isn't correct
27 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 620 KB Output is correct
2 Correct 3 ms 620 KB Output is correct
3 Incorrect 2 ms 620 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 620 KB Output is correct
2 Correct 3 ms 620 KB Output is correct
3 Incorrect 2 ms 620 KB Output isn't correct
4 Halted 0 ms 0 KB -