uva--11129An antiarithmetic permutation+分治
来源:互联网 发布:知豆新能源汽车 编辑:程序博客网 时间:2024/05/17 06:03
题意:
输入一个数n,求n的一个排列,要求这个排序的任意一个子序列都不能是等差数列。
思路:
想了很久,但是除了枚举以外还是没想到其它的思路,枚举是一定会超时的;到网上看了别人的解题报告
才知道应该用分治的方法做。
分治的思想:考虑一个等差数列,我们把其奇数项,偶数项都提取出来;显然这两个序类内部还是等差数列,但是
它们之间的元素就不可能形成等差数列了;然后我们可以对得到的两个序列再进行同样的划分。。。。。这样多次划分以后就可以保证整个序列没有子序列为等差数列了。
代码如下:
#include<iostream>#include<cstring>#include<cstdio>using namespace std;int a[11000],b[11000];void divide(int x,int y){ int i,j; if(y-x<=1) return ; for(i=x;i<=y;i++) b[i]=a[i]; ///提取偶数项 for(i=x,j=x;j<=y;j+=2,i++) a[i]=b[j]; ///提取奇数项 for(j=x+1;j<=y;j+=2,i++) a[i]=b[j]; divide((x+y)/2+1,y); divide(x,(x+y)/2);}int main(){ int i,j,n; while(scanf("%d",&n)&&n) { for(i=0;i<n;i++) a[i]=i; divide(0,n-1); printf("%d:",n); for(i=0;i<n;i++) printf(" %d",a[i]); printf("\n"); } return 0;}
0 0
- uva - 11129 - An antiarithmetic permutation(分治)
- 【分治】UVa 11129 An antiarithmetic permutation
- UVA-11129 - An antiarithmetic permutation (分治)
- uva--11129An antiarithmetic permutation+分治
- An antiarithmetic permutation +uva+分治
- UVa 11129 An antiarithmetic permutation (构造题&想法题&分治)
- uva:11129 - An antiarithmetic permutation(分治法)
- UVa 11129 - An antiarithmetic permutation
- UVa 11129 - An antiarithmetic permutation
- uva 11129 - An antiarithmetic permutation
- UVA 11129 - An antiarithmetic permutation
- UVA 11129 An antiarithmetic permutation
- uva 11129 - An antiarithmetic permutation
- uva 11129 An antiarithmetic permutation
- uva 11129 - An antiarithmetic permutation
- UVa 11129 - An antiarithmetic permutation
- UVA - 11129 An antiarithmetic permutation
- uva 11129 An antiarithmetic permutation
- 关于Linux下C编译错误(警告)cast from 'void*' to 'int' loses precision
- storm-0.9.3 wordcount例子运行步骤(单机版)
- poj1961解题报告
- 调整java虚拟机(JVM)内存大小
- eayui datagrid 分页 排序 详解
- uva--11129An antiarithmetic permutation+分治
- 最简单的哈密顿圈
- BZOJ1006
- spring 配置定时器
- STL 算法
- 关于用sublime text直接编译python的设置
- CCScrollView 和 CCLabelTTF 组成CCScrollLabel
- Windows 开发一些细节(待完善)
- EnumThreadWindows枚举线程的所有窗口