Submission #434024

#TimeUsernameProblemLanguageResultExecution timeMemory
434024pliam정렬하기 (IOI15_sorting)C++14
100 / 100
544 ms23372 KiB
#include "sorting.h" #include <bits/stdc++.h> using namespace std; #define MAXN 200005 int from[MAXN]; int from_pos[MAXN]; int s_pos[MAXN]; int n; int s[MAXN]; int* x; int* y; int p[MAXN]; int q[MAXN]; void change_from(int a,int b){ swap(from_pos[a],from_pos[b]); from[from_pos[a]]=a; from[from_pos[b]]=b; } void swap_s(int a,int b){ swap(s[a],s[b]); s_pos[s[a]]=a; s_pos[s[b]]=b; } bool check(int r){ for(int i=0;i<n;i++){ from[i]=i; from_pos[i]=i; s_pos[s[i]]=i; } for(int i=r-1;i>0;i--){ if(x[i]!=y[i]) change_from(x[i],y[i]); } int i=0; for(int pos=0;pos<r;pos++){ if(x[pos]!=y[pos]) swap_s(x[pos],y[pos]); while(i<n){ if(s_pos[i]!=from[i]) break; i++; } if(i!=n){ p[pos]=from[i]; q[pos]=s_pos[i]; swap_s(p[pos],q[pos]); i++; }else{ p[pos]=0; q[pos]=0; } if((pos<r-1)&&(x[pos+1]!=y[pos+1])) change_from(x[pos+1],y[pos+1]); } for(int i=0;i<n;i++){ if(s[i]!=i) return false; } return true; } int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) { n=N; x=X; y=Y; for(int i=0;i<n;i++){ s[i]=S[i]; } bool sorted=true; for(int i=0;i<n;i++){ if(s[i]!=i) sorted=false; } if(sorted) return 0; int k=N; for(int b=N-1;b>0;b/=2){ while(k-b>0){ bool ans=check(k-b); for(int i=0;i<n;i++){ s[i]=S[i]; } if(!ans) break; k-=b; } } check(k); for(int i=0;i<k;i++){ P[i]=p[i]; Q[i]=q[i]; } return k; }

Compilation message (stderr)

sorting.cpp: In function 'bool check(int)':
sorting.cpp:56:10: warning: declaration of 'i' shadows a previous local [-Wshadow]
   56 |  for(int i=0;i<n;i++){
      |          ^
sorting.cpp:37:6: note: shadowed declaration is here
   37 |  int i=0;
      |      ^
sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:62:39: warning: unused parameter 'M' [-Wunused-parameter]
   62 | int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
      |                                   ~~~~^
#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...