UVA - 11129 An antiarithmetic permutation

来源:互联网 发布:网络名誉侵权起诉状 编辑:程序博客网 时间:2024/05/18 02:05

题目大意:给出一个数值 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;}


0 0