Submission #287447

#TimeUsernameProblemLanguageResultExecution timeMemory
287447AaronNaiduSorting (IOI15_sorting)C++14
0 / 100
2 ms768 KiB
#include <bits/stdc++.h>
#include "sorting.h"
using namespace std;

vector<int> s;
int n;
int p[100000];
int q[100000];

void finish(int x) {
    cout << "Takes " << x << "\n";
    for (int i = 0; i < x; i++)
    {
        cout << "Round " << i << ": swap " << p[i] << " and " << q[i] << "\n";
    }
    return;
}

bool sorted() {
    for (int i = 0; i < n; i++)
    {
        if (s[i] != i)
        {
            return false;
        }
    }
    return true;
}

int findSwapPairs(int N,int S[],int M, int X[],int Y[], int P[],int Q[]) {
    for (int i = 0; i < M; i++)
    {
        P[i] = 0;
        Q[i] = 0;
    }
    n = N;
    for (int i = 0; i < N; i++)
    {
        s.push_back(S[i]);
    }
    for (int i = N-1; i >= 0; i--)
    {
        if (sorted())
        {
            //finish(N-1-i);
            return N-1-i;
        }
        swap(s[X[N-1-i]], s[Y[N-1-i]]);
        /*cout << "He swaps " << X[N-1-i] << " and " << Y[N-1-i] << "\n";
        cout << "Sequence is now: ";
        for (int k = 0; k < n; k++)
        {
            cout << s[k] << " ";
        }
        cout << "\n";*/
        for (int j = 0; j < N; j++)
        {
            if (s[j] == i)
            {
                P[N-1-i] = j;
                p[N-1-i] = j;
                Q[N-1-i] = i;
                q[N-1-i] = i;
                swap(s[j], s[i]);
                /*cout << "We swap " << j << " and " << i << "\n";
                cout << "Sequence is now: ";
                for (int k = 0; k < n; k++)
                {
                    cout << s[k] << " ";
                }
                cout << "\n";*/
                break;
            }
            if (j == N-1)
            {
                assert(false);
            }
            
        }
    }
    //finish(N);
    assert(sorted());
    return N;
}
#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...