题目:
构造一个任意子串都不是等差序列的序列
思路:
隔两位存储,分成13572468类型的串,然后切半进行相同操作就一定不会等差
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<iostream>
using namespace std;
int n;
const int maxn = 10005;
int arr[maxn];
int cop[maxn];
void solve(int l, int r) {
int i, j;
if(l>=r) return;
memcpy(cop, arr, sizeof(arr));
for(i=l,j=l; i<=r; i+=2,j++) {
arr[j]=cop[i];
}
for(i=l+1; i<=r; i+=2,j++) {
arr[j] = cop[i];
}
solve(l,(l+r)/2);
solve((l+r)/2+1,r);
}
int main() {
int i;
while(scanf("%d", &n) !=EOF && n) {
printf("%d: ",n);
for(i=0; i<n; i++) arr[i] = i;
solve(0, n-1);
for(i=0; i<n; i++) printf(" %d", arr[i]);
printf("\n");
}
return 0;
}