Cod sursa(job #1247616)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 23 octombrie 2014 01:16:46
Problema Dame Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.29 kb
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
//=======================*
ifstream fin("date.in");
ofstream fout("date.out");
//=======================*
int n, m, i, j, k, ok, minim, maxim;
int v[1000001], w[1000001], ii, jj, i1, j1;
int a[1001][1001], b[1001][1001], iv, jv;
int x, y, z, t, nr, aux;
//=======================*
int main(){
    fin>> n;
    //Avem 2 cazuri:
    if(n <= 3){//Cazul cand algoritmul numerge (n <= 3)
        if(n == 1 || n == 2){//Cazul cand n == 1 || n == 2
            fout<< 1 <<"\n"<< 1 <<" "<< 1 <<"\n";
        }
        else{//Cazul cand n == 3
            fout<< 2 <<"\n"<< 1 <<" "<< 1 <<"\n"<< 2 <<" "<< 3 <<"\n";
        }
    }
    else{//Cazul cand algoritmul merge (n > 3)
        fout<< n <<"\n";//Numarul reginelor e n (avem n linii)
        for(i = 2; i <= n; i += 2){//Notam pozitiile in vectorul v
            v[i] = i;//Mai intai notam numerele pare
        }//Ca in exemplu
        if(n % 12 == 9 || n % 12 == 3){//Si verificam cazul cand
            for(i = 2; i <= n / 2; i ++){//n se imparte la 3 , 9
                v[i-1] = v[i];
            }
            v[n/2] = 2;
        }
        x = 2;//
        for(i = n / 2 + 1; i <= n; i ++){//Notam pozitiile in vectorul v
            v[i] = x;//Dupa pe cele impare
            x += 2;
        }
        if(n % 12 == 8){//Verificam cazul cand se imparte la 8
            for(i = n / 2 + 1; i <= n / 2 + n / 4; i ++){
                aux = v[i * 2 - n / 2 - 1];
                v[i * 2 - n / 2 - 1] = v[i * 2 - n / 2];
                v[i * 2 - n / 2] = aux;
            }//interschimbam v[i * 2 - n / 2 - 1] cu v[i * 2 - n / 2
        }
        if(n % 12 == 2){//Verificam cazul cand se imparte la 2
            v[n / 2 + 1] = 3;
            v[n / 2 + 2] = 1;
            for(i = n / 2 + 4; i <= n; i ++){
                v[i - 1] = v[i];
            }
            v[n] = 5;
        }
        if(n % 12 == 3 || n % 12== 9){//Verificam cazul cand n se
            for(i = n / 2 + 3; i <= n; i ++){//imparte la 3 , 9
                v[i - 2] = v[i];
            }
            v[n - 1] = 1;
            v[n] = 3;
        }
        for(i = 1; i <= n; i++){//Afisare
            fout<< i << " " << v[i] << "\n";
        }
    }
    return 0;
}