Nu aveti permisiuni pentru a descarca fisierul grader_test8.in
Cod sursa(job #2236844)
Utilizator | Data | 30 august 2018 19:18:55 | |
---|---|---|---|
Problema | Dame | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.48 kb |
#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; }