Cod sursa(job #1350187)

Utilizator dariusdariusMarian Darius dariusdarius Data 20 februarie 2015 18:17:52
Problema Dame Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <cassert>

#include <algorithm>
#include <fstream>
#include <iostream>
using namespace std;

int main() {
    ifstream fin("dame.in");
    ofstream fout("dame.out");
    int n;
    fin >> n;
    if (n == 1 || n == 2) {
        fout << "1\n1 1\n";
        return 0;
    }
    if (n == 3) {
        fout << "2\n";
        fout << "1 1\n";
        fout << "2 3\n";
        return 0;
    }
    vector<int> v;
    for (int i = 2; i <= n; i += 2) {
        v.push_back(i);
    }
    if (n % 12 == 3 || n % 12 == 9) {
        v.erase(v.begin());
        v.push_back(2);
    }
    for (int i = 1; i <= n; i += 2) {
        v.push_back(i);
    }
    if (n % 12 == 8) {
        for (int i = 0; i + 1 < static_cast<int>(v.size()); ++ i) {
            if (v[i] % 2 == 1) {
                swap(v[i], v[i + 1]);
                ++ i;
            }
        }
    }
    if (n % 12 == 2) {
        v.erase(find(v.begin(), v.end(), 5));
        v.push_back(5);
        vector<int> :: iterator it = find(v.begin(), v.end(), 1);
        swap(*it, *(it + 1));
    }
    if (n % 12 == 3 || n % 12 == 9) {
        v.erase(find(v.begin(), v.end(), 1));
        v.erase(find(v.begin(), v.end(), 3));
        v.push_back(1);
        v.push_back(3);
    }
    for (int i = 1; i <= n; ++ i) {
        for (int j = i + 1; j <= n; ++ j) {
            if (i + v[i - 1] == j + v[j - 1] || i - v[i - 1] == j - v[j - 1]) {
                cout << "collision!\n";
            }
        }
    }
    fout << n << "\n";
    for (int i = 0; i < n; ++ i) {
        fout << i + 1 << " " << v[i] << "\n";
    }
    return 0;
}