您的位置:首页 > 其它

UVA 11129 - An antiarithmetic permutation

2012-02-01 14:09 429 查看
一个整数n,求它的一个序列,这个序列的要求是其中任何一个子序列都不能是等差序列。枚举必

然超时,然后想了半个小时没有任何想法,就参考了七里 大神的思路,用分治法将序列中处于奇

偶位置的数字分组,开始分出来的是等差2的序列,然后再在奇偶序列中分组,最终得出的序列就

是符合要求的序列中的一个。暂时没有更好的想法。

#include<cstdio>
#include<cstring>
#include<cstdlib>
#define MAXN 10010

int a[MAXN], b[MAXN];
int n;

void dvide( int x, int y)
{
int i, j;
if( y - x <= 1) return;
for( int i = x; i <= y; i ++)
b[i] = a[i];

for( i = x, j = x; j <= y; j += 2, i ++)//最终i = mid
a[i] = b[j];

for( j = x + 1; j <= y; j += 2, i ++) //最终 i = y
a[i] = b[j];

dvide((x + y) / 2 + 1, y);
dvide( x, (x + y) / 2);
}

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