您的位置:首页 > 其它

Uva11129-An Antiarithmetic Permutation

2013-08-15 21:55 471 查看
分治:按着网上的思路写的

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
int n;
vector<int> aa,bb;
void init(){
aa.clear();
aa.resize(n);
bb.clear();
bb.resize(n);
for(int i = 0; i < n; i++){
bb[i] = i;
}

}
void divide(int a,int b){

if(a+1 >= b){
return;
}
int k = a;
for(int i = a; i <= b; i++){
aa[i] = bb[i];
}
for(int i = a; i <= b; i+=2,k++){
bb[k] = aa[i];
}
for(int i = a+1; i <= b; i+=2,k++){
bb[k] = aa[i];
}
divide(a,(a+b)/2);
divide((a+b)/2+1,b);

}
int main(){

while(~scanf("%d",&n) && n){
init();
divide(0,n-1);
printf("%d: ",n);
for(int i = 0; i < n-1; i++){
cout<<bb[i]<<" ";
}
cout<<bb[n-1]<<endl;

}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: