제출 #133640

#제출 시각아이디문제언어결과실행 시간메모리
133640Mahdi_Jfri정렬하기 (IOI15_sorting)C++14
20 / 100
18 ms380 KiB
#include "sorting.h"
#include<bits/stdc++.h>

using namespace std;

#define ll long long
#define pb push_back

const int maxn = 2e5 + 20;

int pos[maxn];

int findSwapPairs(int n, int a[], int m, int x[], int y[], int p[], int q[])
{
	bool f = 1;
	for(int i = 0; i < n; i++)
		if(a[i] != i)
			f = 0;
	if(f)
		return 0;

	swap(a[x[0]] , a[y[0]]);

	for(int i = 0; i < n; i++)
		pos[i] = i;
	for(int i = m - 2; i >= 0; i--)
		swap(pos[x[i + 1]] , pos[y[i + 1]]);

	for(int i = 0; i < m; i++)
		p[i] = 0 , q[i] = 0;

	for(int i = 0; i < m; i++)
	{
		for(int j = 0; j < n; j++)
			if(pos[j] != a[j])
			{
				int ind = -1;
				for(int k = 0; k < n; k++)
					if(a[k] == pos[j])
						ind = k;
				
				while(ind < 0);
				p[i] = j , q[i] = ind;
				swap(a[j] , a[ind]);
				break;
			}

		f = 1;
		for(int j = 0; j < n; j++)
			if(a[j] != j)
				f = 0;
		if(f)
			return i + 1;

		if(i + 1 < m)
		{
			swap(pos[x[i + 1]] , pos[y[i + 1]]);
			swap(a[x[i + 1]] , a[y[i + 1]]);
		}
	}

	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...