Submission #1212353

#TimeUsernameProblemLanguageResultExecution timeMemory
1212353XCAC197Sorting (IOI15_sorting)C++20
0 / 100
6 ms576 KiB
#include "sorting.h"
#include <algorithm>
#include <iostream>
#include <assert.h>
using namespace std;

int findSwapPairs(int N, int S[], int M, int X[], int Y[], int P[], int Q[]) {
    
    int tmp [N];
    int A [N];
    for(int i = 0; i < N; i++){
        A[i] = i;
        tmp[i] = S[i];
    }
    //go backwards
    for(int i = M-1; i >= 0; i--){
        swap(A[X[i]], A[Y[i]]);
    }
    for(int i = 0; i < M; i++){
        swap(A[X[i]], A[Y[i]]);
        swap(S[X[i]], S[Y[i]]);
        bool done = false;
        for(int j = 0; j < N; j++){
            if(S[j] != A[j]){
                int kva = 0;
                for(int k = 0; k < N; k++){
                    if(S[k] == A[j]){
                        kva = k;
                    }
                }
                swap(S[j], S[kva]);
                P[i] = j;
                Q[i] = kva;
                done = true;
                break;
            }
        }
        if(!done){
            P[i] = 0;
            Q[i] = 0;
        }
    }
    for(int i = 0; i < N; i++){
        assert(S[i] == i);
    }
    for(int i = 0; i < M; i++){
        swap(tmp[X[i]], tmp[Y[i]]);
        swap(tmp[P[i]], tmp[Q[i]]);
    }
    for(int i = 0; i < N; i++){
        assert(tmp[i] == i);
    }
    assert(false);
    cerr << "ASSERTS OK" << endl;
    /*for(int i = 0; i < N; i++){
        cerr << A[i] << " ";
    }
    cerr << endl;
    for(int i = 0; i < N; i++){
        cerr << S[i] << " ";
    }
    cerr << endl;*/
    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...