uva 11129 An antiarithmetic permutation

来源:互联网 发布:hashmap的hash算法key 编辑:程序博客网 时间:2024/05/17 20:10

贪心算法,不断提取区间里面奇数位置和偶数位置的数字,把提取出来的两组数据放在区间的前半段和后半段,一直迭代,直到区间小到只有一个或两个元素。

#include <stdio.h>#include <string.h>#include <vector>using namespace std;int arr[10005];bool visited[10005];vector<int> v1, v2;void change(int start, int end){if(end==start+1)return;if(end == start)return;int i, count, len;v1.clear();v2.clear();for(i=start; i<=end; i+=2)v1.push_back(arr[i]);for(i=start+1; i<=end; i+=2)v2.push_back(arr[i]);count = start;for(i=0; i<v1.size(); i++)arr[count++] = v1[i];for(i=0; i<v2.size(); i++)arr[count++] = v2[i];len = end-start+1;if(len%2 == 0){change(start, start+len/2-1);change(start+len/2, end);}else{change(start, start+(len+1)/2-1);change(start+(len+1)/2, end);}}void func(int n){int i;for(i=0; i<=n-1; i++)arr[i] = i;change(0, n-1);printf("%d:", n);for(i=0; i<=n-1; i++)printf(" %d", arr[i]);printf("\n");}int main(void){int n;//freopen("input.dat", "r", stdin);while(1){scanf("%d", &n);if(!n)break;func(n);}return 0;}


原创粉丝点击