您的位置:首页 > 其它

UVA - 11129 An antiarithmetic permutation

2014-10-21 23:02 344 查看
题目大意:给出一个数值 n, 要求用 0~n - 1 这 n 个数组成一个序列,使得这个序列的所有长度大于 2 的子序列都不是等差数列

解题思路:只要对序列按奇偶位置分成两个序列,然后对两个子序列同样进行分类,最后排出来的一定是非等差数列

#include <cstdio>
#include <cstring>

int n, A[10005], T[10005];

void deal(int left, int right) {
if (left == right)
return;
memcpy(T, A, sizeof(A));
int cnt = left;
for (int i = left; i <= right; i += 2)
A[cnt++] = T[i];
for (int i = left + 1; i <= right; i += 2)
A[cnt++] = T[i];
deal(left, (right + left)/2);
deal((right + left)/2 + 1, right);
}

int main() {
while (scanf("%d", &n), n) {
for (int i = 0; i < n; i++)
A[i] = i;
deal(0, n-1);

printf("%d:", n);
for (int i = 0; i < n; i++)
printf(" %d", A[i]);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: