답안 #787692

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
787692 2023-07-19T11:00:06 Z vnm06 정렬하기 (IOI15_sorting) C++14
0 / 100
1 ms 340 KB
#include "sorting.h"
#include<bits/stdc++.h>
using namespace std;

int n;
int a[200005];
int b[200005];

int prebroj()
{
    int ans=n;
    for(int i=0; i<n; i++)
    {
        if(!b[i]) continue;
        ans--;
        int t=b[i];
        b[i]=0;
        while(b[t]!=0)
        {
            int t2=b[t];
            b[t]=0;
            t=t2;
        }
    }
    return ans;
}

int sp[2][200005], brsp=0;
int pos[200005];

int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[])
{
    n=N;
    for(int i=0; i<n; i++) a[i]=S[i];
    int le=0, ri=M;
    while(ri-le>1)
    {
        int mid=(le+ri)/2;
        for(int i=0; i<n; i++) b[i]=a[i];
        for(int j=0; j<mid; j++) swap(b[X[j]], b[Y[j]]);
        if(prebroj()<=mid) ri=mid;
        else le=mid;
    }
    for(int i=0; i<n; i++) b[i]=a[i];
    for(int j=0; j<ri; j++) swap(b[X[j]], b[Y[j]]);
    for(int i=0; i<n; i++) pos[b[i]]=i;
    for(int i=0; i<n; i++)
    {
        int t=b[i];
        if(t==i+1) continue;
        sp[0][brsp]=t;
        sp[1][brsp]=i+1;
        brsp++;
        int tp=pos[i+1];
        pos[b[i]]=pos[i+1];
        pos[i+1]=i+1;
        swap(b[i], b[tp]);
    }
    for(int i=0; i<n; i++) pos[a[i]]=i;
    for(int i=0; i<brsp; i++)
    {
        swap(a[X[i]], a[Y[i]]);
        swap(pos[a[X[i]]], pos[a[Y[i]]]);
        P[i]=pos[sp[0][i]];
        Q[i]=pos[sp[1][i]];
        swap(pos[sp[0][i]], pos[sp[1][i]]);
        swap(a[pos[sp[0][i]]], a[pos[sp[1][i]]]);

    }
    for(int i=brsp; i<ri; i++) P[i]=Q[i]=0;
	return ri;
}


# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Integer 1 violates the range [0, 0]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Integer 1 violates the range [0, 0]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Integer 2 violates the range [0, 1]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Integer 1 violates the range [0, 0]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 340 KB Integer 1800 violates the range [0, 1799]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 340 KB Integer 1800 violates the range [0, 1799]
2 Halted 0 ms 0 KB -