Pagini recente » Cod sursa (job #141394) | Cod sursa (job #1774188) | Cod sursa (job #1875702) | Cod sursa (job #1479525) | Cod sursa (job #356607)
Cod sursa(job #356607)
#include <iostream>
#include <vector>
#include <fstream>
#define MAXN 1010
using namespace std;
ifstream fin("dame.in");
ofstream fout("dame.out");
class Dame {
public:
vector <int> positions;
Dame(int N) {
if ((N % 2 == 0) && (N % 6 != 2)) {
positions = Even_Queens_1(N);
} else
if (N % 2 == 0) {
positions = Even_Queens_2(N);
} else {
positions = Odd_Queens(N);
}
}
private:
vector <int> Even_Queens_1(int N) {
vector <int> result(N);
for (int R = 1; R <= N/2 ; ++R) {
result[R-1] = 2*R;
}
for (int R = N/2 + 1; R <= N; ++R) {
result[R-1] = 2 * R - N - 1;
}
return result;
}
vector <int> Even_Queens_2(int N) {
vector <int> result(N);
for (int R = 1; R <= N/2 ; ++R) {
result[R-1] = Queen_Mod(R,N) + 1;
}
for (int R = N/2 + 1; R <= N; ++R) {
result[R-1] = N - Queen_Mod(N - R + 1, N);
}
return result;
}
vector <int> Odd_Queens(int N) {
Dame Even(N-1);
vector<int> result(N);
for (int R = 0 ; R <= N-1; ++R) {
result[R] = Even.positions[R];
}
result[N-1] = N;
return result;
}
int Queen_Mod(int R,int N) {
return ((2 * R + N/2 - 3) % N);
}
};
int main() {
int N;
fin >> N;
if (N >= 4) {
Dame d(N);
fout << N << "\n";
for (int i=1;i<=N;++i)
fout << i << " " << d.positions[i-1] << "\n";
} else {
fout << 0 << "\n";
}
fin.close();
fout.close();
return 0;
}