Pagini recente » Cod sursa (job #1004549) | Cod sursa (job #158518) | Cod sursa (job #1887963) | Cod sursa (job #1916714) | Cod sursa (job #2236844)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("dame.in");
ofstream g ("dame.out");
int n;
void citire();
// In cazul in care restul impartirii la 6 e 2,
// se inverseaza 1 cu 3 in lista de impare si se
// trece 5 la final
void afisareRest2() {
// i este contorul care merge de la 1 la n
// j merge pe impare respectiv pare
int i, j;
g << n << '\n';
for (i = 1, j = 2; j <= n && i <= n; ++i, j += 2) {
g << i << ' ' << j << '\n';
}
// Afisarea pentru impare
g << i << ' ' << 3 << '\n';
++i;
g << i << ' ' << 1 << '\n';
++i;
for (j = 7; j <= n && i <= n; ++i, j += 2) {
g << i << ' ' << j << '\n';
}
g << i << ' ' << 5;
}
// In cazul in care restul impartirii la 6 e 3,
// se muta 2 la finalul listei de pare si se muta
// 1 si 3 la sfarsitul listei de impare
void afisareRest3() {
int i, j;
g << n << '\n';
for (i = 1, j = 4; j <= n && i <= n; ++i, j += 2) {
g << i << ' ' << j << '\n';
}
g << i << ' ' << 2 << '\n';
++i;
for (j = 5; j <= n && i <= n; ++i, j += 2) {
g << i << ' ' << j << '\n';
}
g << i << ' ' << 1 << '\n';
++i;
g << i << ' ' << 3 << '\n';
}
void afisareGenerala() {
int i, j;
g << n << '\n';
for (i = 1, j =2; j <= n && i <= n; ++i, j += 2) {
g << i << ' ' << j << '\n';
}
for (j = 1; j <=n && i <= n; ++i, j += 2) {
cout << i << ' ' << j << '\n';
g << i << ' ' << j << '\n';
}
}
void afisareCazParticular() {
if (n == 3) {
g << 2 << '\n';
g << 1 << ' ' << 1 << '\n';
g << 2 << ' ' << 3;
}
else if (n == 2 || n == 1) {
g << 1 << '\n';
g << 1 << ' ' << 1;
}
}
void decizie() {
// Pentru tabla mai mica (strict) decat patru,
// exista cazuri particulare
if (n < 4) {
afisareCazParticular();
}
// In cazul in care restul impartirii la 6 e 2,
// se inverseaza 1 cu 3 in lista de impare si se
// trece 5 la final
else if (n % 6 == 2) {
afisareRest2();
}
// In cazul in care restul impartirii la 6 e 3,
// se muta 2 la finalul listei de pare si se muta
// 1 si 3 la sfarsitul listei de impare
else if (n % 6 == 3) {
afisareRest3();
}
else {
afisareGenerala();
}
}
int main()
{
citire();
decizie();
return 0;
}
void citire() { f >> n; }