Cod sursa(job #1732876)

Utilizator cristina_borzaCristina Borza cristina_borza Data 22 iulie 2016 20:27:18
Problema Dame Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.15 kb
#include <fstream>

using namespace std;

ifstream f ("dame.in");
ofstream g ("dame.out");

int li[1500] , dr , n , p1 , p2 , p;

int main() {
    f >> n;

    dr = 0;
    if(n == 2) {
        g << 1 << '\n' << 1 << " " << 1;
        return 0;
    }

    if (n == 3) {
        g << 2 << '\n' << 2 << " " << 1 << '\n' << 3 << " " << 3;
        return 0;
    }

    for (int i = 2; i <= n; i += 2) {
        li[++dr] = i;
    }

    if (n % 12 == 3 || n % 12 == 9) {
        for (int i = 1; i <= dr; ++i) {
            li[i] = li[i + 1];
        }
        li[dr] = 2;
    }

    for (int i = 1; i <= n; i += 2) {
        li[++dr] = i;
    }

    if (n % 12 == 8) {
        for (int i = 1; i <= dr; ++i) {
            if (li[i] % 2 == 1 && li[i - 1] % 2 == 1) {
                swap(li[i] , li[i - 1]);
                ++i;
            }
        }
    }

    if (n % 12 == 2) {
        for (int i = 1; i <= dr; ++i) {
            if (li[i] == 1) {
                p1 = i;
                break;
            }
        }

        for (int i = 1; i <= dr; ++i) {
            if (li[i] == 3) {
                p2 = i;
                break;
            }
        }

        swap(li[p1] , li[p2]);
        for (int i = 1; i <= dr; ++i) {
            if (li[i] == 5) {
                p = i;
                break;
            }
        }

        for (int i = p; i < dr; ++i) {
            li[i] = li[i + 1];
        }

        li[dr] = 5;
    }

    if (n % 12 == 3 || n % 12 == 9) {
        for (int i = 1; i <= dr; ++i) {
            if (li[i] == 1) {
                p = i;
                break;
            }
        }

        for (int i = p; i < dr; ++i) {
            li[i] = li[i + 1];
        }

        li[dr] = 1;

        for (int i = 1; i <= dr; ++i) {
            if (li[i] == 3) {
                p = i;
                break;
            }
        }

        for (int i = p; i < dr; ++i) {
            li[i] = li[i + 1];
        }

        li[dr] = 3;
    }

    g << n << '\n';
    for (int i = 1; i <= dr; ++i) {
        g << i << " " << li[i] << '\n';
    }
    return 0;
}