Run Time: 0.000
Ranking (as of 2016-10-17): 9 out of 422
Language: C++
For more information, see Wikipedia's article Eight queens puzzle.
/* UVa 10094 - Place the Guards To build using Visual Studio 2012: cl -EHsc -O2 UVa_10094_Place_the_Guards.cpp */ #include <cstdio> #ifdef DEBUG #include <cassert> #include <cstdlib> #endif const int n_max = 1000; int rows[n_max + 1]; // rows[i] is the row number for i-th column #ifdef DEBUG bool validate_rows(int n) { for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) if (i != j) { if (rows[i] == rows[j] || abs(i - j) == abs(rows[i] - rows[j])) return false; } return true; } #endif int main() { int n; while (scanf("%d", &n) != EOF) { if (n < 4) puts("Impossible"); else { int m = n; if (m & 1) { // odd rows[m] = m; m--; } int i, j, k; if ((m - 2) % 6) for (i = 1, j = m / 2; i <= j; i++) { k = 2 * i; rows[i] = k, rows[j + i] = k - 1; } else for (i = 1, j = m / 2; i <= j; i++) { k = (2 * i + j - 3) % m; rows[i] = 1 + k, rows[m + 1 - i] = m - k; } #ifdef DEBUG assert(validate_rows(n)); #endif for (int i = 1; i <= n; i++) printf("%d%c", rows[i], ((i < n) ? ' ' : '\n')); } } return 0; }
No comments:
Post a Comment