제출 #669777

#제출 시각아이디문제언어결과실행 시간메모리
669777alvingogo정렬하기 (IOI15_sorting)C++14
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> #pragma GCC optimize("Ofast") #define AquA cin.tie(0);ios_base::sync_with_stdio(0); #define fs first #define sc second #define p_q priority_queue using namespace std; int n; void print(vector<int> s){ for(int i=0;i<n;i++){ cout << s[i] << " "; } cout << "\n"; } void print2(int s[]){ for(int i=0;i<n;i++){ cout << s[i] << " "; } cout << "\n"; } int findSwapPairs(int N,int S[],int M,int X[],int Y[],int P[],int Q[]){ int l=0,r=M; n=N; while(r>l){ int m=(l+r)/2; vector<int> v(n); iota(v.begin(),v.end(),0); for(int i=0;i<m;i++){ swap(v[X[i]],v[Y[i]]); } vector<int> g(n); for(int i=0;i<n;i++){ g[v[i]]=i; } v=g; for(int i=0;i<n;i++){ g[v[i]]=S[i]; } vector<int> vis(n); int cnt=0; for(int i=0;i<n;i++){ if(!vis[i]){ cnt++; vis[i]=1; int a=i; while(1){ a=g[a]; if(vis[a]){ break; } vis[a]=1; } } } int t=n-cnt; if(t<=m){ r=m; } else{ l=m+1; } } vector<int> v(n); iota(v.begin(),v.end(),0); for(int i=0;i<l;i++){ swap(v[X[i]],v[Y[i]]); } vector<int> g(n); for(int i=0;i<n;i++){ g[v[i]]=i; } v=g; vector<int> d(n),e(n); for(int i=0;i<n;i++){ d[S[i]]=i; e[v[i]]=i; } vector<int> vis(n); int c=0,cn=0; set<int> u; for(int i=0;i<n;i++){ if(v[i]!=S[i]){ u.insert(i); } } for(int i=0;i<l;i++){ { int t=X[i],f=Y[i]; swap(d[S[t]],d[S[f]]); swap(S[t],S[f]); swap(e[v[t]],e[v[f]]); swap(v[t],v[f]); if(v[t]!=S[t]){ u.insert(t); } else{ u.erase(t); } if(v[f]!=S[f]){ u.insert(f); } else{ u.erase(f); } } if(!u.size()){ continue; } auto cn=*u.begin(); u.erase(cn); assert(v[cn]!=S[cn]); if(v[cn]!=S[cn]){ int t=cn,f=d[v[cn]]; swap(d[S[t]],d[S[f]]); swap(S[t],S[f]); if(v[t]!=S[t]){ u.insert(t); } else{ u.erase(t); } if(v[f]!=S[f]){ u.insert(f); } else{ u.erase(f); } P[c]=t; Q[c]=f; c++; } } if(c<l){ P[c]=Q[c]=0; c++; } return l; } int main(){ int N, M; cin >> N; int *S = (int*)malloc(sizeof(int) * (unsigned int)N); for (int i = 0; i < N; ++i) cin >> S[i]; cin >> M; int *X = (int*)malloc(sizeof(int) * (unsigned int)M), *Y = (int*)malloc(sizeof(int) * (unsigned int)M); for (int i = 0; i < M; ++i) { cin >> X[i]; cin >> Y[i]; } int *P = (int*)malloc(sizeof(int) * (unsigned int)M), *Q = (int*)malloc(sizeof(int) * (unsigned int)M); int ans = findSwapPairs(N, S, M, X, Y, P, Q); cout << ans << "\n"; for (int i = 0; i < ans; ++i) cout << P[i] << " " << Q[i] << "\n"; return 0; }

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

sorting.cpp: In function 'int findSwapPairs(int, int*, int, int*, int*, int*, int*)':
sorting.cpp:110:14: warning: declaration of 'cn' shadows a previous local [-Wshadow]
  110 |         auto cn=*u.begin();
      |              ^~
sorting.cpp:80:13: note: shadowed declaration is here
   80 |     int c=0,cn=0;
      |             ^~
sorting.cpp:80:13: warning: unused variable 'cn' [-Wunused-variable]
/usr/bin/ld: /tmp/ccHjxIM4.o: in function `main':
grader.c:(.text.startup+0x0): multiple definition of `main'; /tmp/ccKN4l74.o:sorting.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status