답안 #1018473

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1018473 2024-07-10T06:02:04 Z huutuan 정렬하기 (IOI15_sorting) C++14
0 / 100
103 ms 588 KB
#include "sorting.h"

#include <bits/stdc++.h>

using namespace std;

int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
   if (is_sorted(S, S+N)) return 0;
   for (int i=0; i<M; ++i){
      swap(S[X[i]], S[Y[i]]);
      if (is_sorted(S, S+N)) return i+1;
      vector<vector<int>> vv;
      vector<int> vis(N);
      int cnt=0;
      for (int j=0; j<N; ++j) if (!vis[j]){
         vv.emplace_back();
         int u=j;
         ++cnt;
         while (!vis[u]){
            vv.back().push_back(u); vis[u]=cnt;
            u=S[u];
         }
      }
      cout << vv.size() << endl;
      if (i+1==M){
         if ((int)vv.size()!=N-1) return -1;
         for (auto &j:vv) if ((int)j.size()==2) P[i]=j[0], Q[i]=j[1];
         return M;
      }
      int u=X[i+1], v=Y[i+1];
      if (vis[u]==vis[v] && u!=v){
         if ((int)vv[vis[u]-1].size()==2){
            if ((int)vv.size()!=N-1){
               int id=0;
               while (id==vis[u]-1 || (int)vv[id].size()==1) ++id;
               P[i]=vv[id][0], Q[i]=vv[id][1];
            }
         }else{
            if (S[u]==v){
               P[i]=v, Q[i]=S[v];
            }else{
               P[i]=u, Q[i]=S[u];
            }
         }
      }else{
         int id=0;
         while ((int)vv[id].size()==1) ++id;
         P[i]=vv[id][0], Q[i]=vv[id][1];
      }
      swap(S[P[i]], S[Q[i]]);
      if (is_sorted(S, S+N)) return i+1;
   }
   return -1;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Unexpected character #10, but ' ' expected
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Unexpected character #10, but ' ' expected
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 0 ms 348 KB Unexpected character #10, but ' ' expected
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Unexpected character #10, but ' ' expected
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 103 ms 588 KB Unexpected character #10, but ' ' expected
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 103 ms 588 KB Unexpected character #10, but ' ' expected
2 Halted 0 ms 0 KB -