Cod sursa(job #1804448)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 12 noiembrie 2016 16:28:59
Problema Dame Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream>
#include <vector>
#include <cstring>
#include <algorithm>

using namespace std;

ifstream fin("dame.in");
ofstream fout("dame.out");

int main() {

    int n; fin >> n;

    if (n == 1 || n == 2) {
        fout << "1\n1 1\n";
        return 0;
    }

    if (n == 3) {
        fout << "2\n1 1\n3 2\n";
        return 0;
    }

    vector<int> perm;
    for (int i = 2; i <= n; i += 2)
        perm.push_back(i);


    int modulo12 = n % 12;

    if (modulo12 == 3 || modulo12 == 9) {
        perm.erase(perm.begin());
        perm.push_back(2);
    }

    for (int i = 1; i <= n; i += 2)
        perm.push_back(i);

    if (modulo12 == 8)
        for (size_t i = 0; i < perm.size(); ++i)
            if (perm[i] % 4 == 1)
                swap(perm[i], perm[i + 1]), ++i;

    if (modulo12 == 2) {
        auto it = perm.begin();
        while (*it != 1)
            it++;
        swap(*it, *(it+1));
        perm.erase(it + 2);
        perm.push_back(5);;
    }

    if (modulo12 == 3 || modulo12 == 9) {
        auto it = perm.begin();
        while (*it != 1)
            it++;
        perm.erase(it, it+2);
        perm.push_back(1);
        perm.push_back(3);
    }

    fout << n << '\n';
    for (int i = 1; i <= n; ++i)
        fout << i << ' ' << perm[i - 1] << '\n';

    return 0;

}

//Trust me, I'm the Doctor!