一个整数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;
}
浙公网安备 33010602011771号