제출 #1135585

#제출 시각아이디문제언어결과실행 시간메모리
1135585Luvidi정렬하기 (IOI15_sorting)C++20
0 / 100
1 ms580 KiB
#include <bits/stdc++.h>
#include "sorting.h"
using namespace std;

int findSwapPairs(int n, int s[], int m, int x[], int y[], int p[], int q[]) {
	int a[n];
	for(int i=0;i<n;i++)a[i]=s[i];
	for(int i=0;i<m;i++)swap(a[x[i]],a[y[i]]);
	vector<pair<int,int>> v;
	int idx[n];
	for(int i=0;i<n;i++)idx[a[i]]=i;
	for(int i=0;i<n;i++)if(a[i]!=i){
		v.push_back({i,idx[i]});
		swap(a[i],a[idx[i]]);
		swap(idx[a[i]],idx[a[idx[i]]]);
	}
	iota(a,a+n,0);
	iota(idx,idx+n,0);
	while(v.size()<m)v.push_back({0,0});
	for(int i=m-1;i>-1;i--){
		auto[i1,i2]=v[i];
		p[i]=idx[i1];
		q[i]=idx[i2];
		// swap(a[x[i]],a[y[i]]);
		// swap(idx[a[x[i]]],idx[a[y[i]]]);
	}
	for(int i=0;i<n;i++)a[i]=s[i];
	for(int i=0;i<m;i++){
		assert(p[i]>=0&&p[i]<n&&q[i]>=0&&q[i]<n);
		swap(a[x[i]],a[y[i]]);
		swap(a[p[i]],a[q[i]]);
	}
	for(int i=0;i<n;i++){
		assert(a[i]==i);
	}
	return m;
}
#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...