Pagini recente » Cod sursa (job #2781952) | Borderou de evaluare (job #368865) | Cod sursa (job #1247616)
#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;
}