Pagini recente » Cod sursa (job #507813) | Cod sursa (job #1773807) | Cod sursa (job #1202648) | Cod sursa (job #651626) | Cod sursa (job #1350187)
#include <cassert>
#include <algorithm>
#include <fstream>
#include <iostream>
using namespace std;
int main() {
ifstream fin("dame.in");
ofstream fout("dame.out");
int n;
fin >> n;
if (n == 1 || n == 2) {
fout << "1\n1 1\n";
return 0;
}
if (n == 3) {
fout << "2\n";
fout << "1 1\n";
fout << "2 3\n";
return 0;
}
vector<int> v;
for (int i = 2; i <= n; i += 2) {
v.push_back(i);
}
if (n % 12 == 3 || n % 12 == 9) {
v.erase(v.begin());
v.push_back(2);
}
for (int i = 1; i <= n; i += 2) {
v.push_back(i);
}
if (n % 12 == 8) {
for (int i = 0; i + 1 < static_cast<int>(v.size()); ++ i) {
if (v[i] % 2 == 1) {
swap(v[i], v[i + 1]);
++ i;
}
}
}
if (n % 12 == 2) {
v.erase(find(v.begin(), v.end(), 5));
v.push_back(5);
vector<int> :: iterator it = find(v.begin(), v.end(), 1);
swap(*it, *(it + 1));
}
if (n % 12 == 3 || n % 12 == 9) {
v.erase(find(v.begin(), v.end(), 1));
v.erase(find(v.begin(), v.end(), 3));
v.push_back(1);
v.push_back(3);
}
for (int i = 1; i <= n; ++ i) {
for (int j = i + 1; j <= n; ++ j) {
if (i + v[i - 1] == j + v[j - 1] || i - v[i - 1] == j - v[j - 1]) {
cout << "collision!\n";
}
}
}
fout << n << "\n";
for (int i = 0; i < n; ++ i) {
fout << i + 1 << " " << v[i] << "\n";
}
return 0;
}