#include <cstdio>
#include <algorithm>
int d[10];
// lexicographical_order: 11.888 ms / 59.242 ms
void lexicographical_order(const int size)
{
int tot = 1, i, j;
for (i = 0; i < size; i++) d[i] = i+1, tot *= i+1;
for (i = 0; i < size-1; i++) printf("%d ", d[i]); printf("%d\n", d[i]);
while (--tot)
{
i = size - 2;
while (d[i] > d[i+1]) i--;
j = size - 1;
while (j != i) {
if (d[j] > d[i]) {
std::swap(d[j], d[i]);
break;
} else j--;
}
i++;
j = size - 1;
while (i < j) {
std::swap(d[i], d[j]);
i++; j--;
}
for (i = 0; i < size-1; i++) printf("%d ", d[i]); printf("%d\n", d[i]);
}
}
// incremental_way: 87.111 ms / 60.427 ms
void incremental_way(const int size)
{
int p[10], tot = 1, i, j, k, l;
for (i = 0; i < size; i++) d[i] = i+1, tot *= i+1, p[i] = tot;
tot = 0;
for (i = 0; i < size-1; i++) printf("%d ", d[i]); printf("%d\n", d[i]);
while (++tot < p[size-1])
{
i = 0;
while (tot % p[i+1] == 0) i++;
j = 0;
k = 0;
for (j = 0; j < size; j++) {
if (d[j] <= i+1) {
d[j] = i+2 - d[j];
k = j;
} else if (d[j] == i+2) {
std::swap(d[j], d[k]);
}
}
for (i = 0; i < size-1; i++) printf("%d ", d[i]); printf("%d\n", d[i]);
}
}
// decremental_way: 5.057 ms / 58.64 ms
void decremental_way(const int size)
{
int tot = 1, i, j, k, l;
for (i = 0; i < size; i++) d[i] = i+1, tot *= i+1;
k = size - 1;
for (i = 0; i < size-1; i++) printf("%d ", d[i]); printf("%d\n", d[i]);
while (--tot)
{
i = 0; while (d[i] + i == size) i++;
if (i) {
j = i; while (j < size) {
if (d[j] == size-i) d[j-i] = d[j-i-1], d[j-i-1] = d[j]; else d[j-i] = d[j];
j++;
}
j = i; while (j) d[size-j] = size-j+1, j--;
k = size - 1;
} else {
std::swap(d[k], d[k-1]);
k--;
}
for (i = 0; i < size-1; i++) printf("%d ", d[i]); printf("%d\n", d[i]);
}
}
// neighbor_swap: ? ms / 41.727ms
void neighbor_swap(const int size)
{
bool r[10];
int pre[11], nxt[11];
int tot = 1, i, j, k;
for (i = 0; i < size; i++) r[i] = false, tot *= i+1;
for (i = 1; i < size; i++) pre[i] = i-1; pre[0] = 10; nxt[10] = 0;
for (i = 0; i < size-1; i++) nxt[i] = i+1; nxt[size-1] = 10; pre[10] = size-1;
i = 0; while (pre[i] != 10) i++; while (nxt[i] != 10) printf("%d ", i+1), i = nxt[i]; printf("%d\n", i+1);
while (--tot)
{
i = size-1;
while ((!r[i] && pre[i] > i) || (r[i] && nxt[i] > i)) {
r[i--] ^= 1;
}
if (!r[i]) {
j = pre[i];
pre[i] = pre[j];
pre[j] = nxt[pre[i]] = i;
nxt[j] = nxt[i];
nxt[i] = pre[nxt[j]] = j;
} else {
j = nxt[i];
nxt[i] = nxt[j];
nxt[j] = pre[nxt[i]] = i;
pre[j] = pre[i];
pre[i] = nxt[pre[j]] = j;
}
i = 0; while (pre[i] != 10) i++; while (nxt[i] != 10) printf("%d ", i+1), i = nxt[i]; printf("%d\n", i+1);
}
}
// blank: ? ms / 57.307 ms
void blank(const int size)
{
int tot = 1, i;
for (i = 0; i < size; i++) d[i] = i+1, tot *= i+1;
while (tot--) {
for (i = 0; i < size-1; i++) printf("%d ", d[i]); printf("%d\n", d[i]);
}
}
int main()
{
// blank(9);
// lexicographical_order(9);
incremental_way(9);
// decremental_way(9);
// neighbor_swap(9);
return 0;
}
| Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
| Testcase #1 | 426.003 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #2 | 426.141 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #3 | 425.946 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #4 | 425.94 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #5 | 426.003 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #6 | 425.88 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #7 | 425.953 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #8 | 425.914 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #9 | 425.955 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #10 | 425.931 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #11 | 425.984 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #12 | 425.931 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #13 | 426.01 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #14 | 426.002 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #15 | 425.97 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #16 | 425.918 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #17 | 425.935 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #18 | 425.888 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #19 | 425.921 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #20 | 425.923 ms | 6 MB + 244 KB | Wrong Answer | Score: 0 | 显示更多 |