1085. Perfect Sequence
2017-01-04 14:48
288 查看
两天没刷题= =昨天这道题折腾了我一晚上,排序好后一开始用的递归,测试点3就超时了o(╯□╰)o百度到一个很巧妙的方法,从最小数开始试探,满足条件则范围扩大一点,不满足则缩小,一直到范围尾端扩大到最大数,中途记录最大范围。
#include<stdio.h> #include<stdlib.h> void HeapSort(long a[],int size); void HeapAdjust(long a[], int i, int size); int main() { int N, i=1,max=0; long p; scanf("%d %ld",&N,&p); long *data = (long*)malloc(sizeof(long)*(N + 1)); while (i<=N) scanf("%ld", &data[i++]); HeapSort(data, N);/*形成递减数列*/ int j = i=N; long long ans; while (i > 0) { ans = data[j] * p; if (data[i] <= ans) i--; else j--; if (max < j - i) max = j - i; } printf("%d",max); return 0; } void HeapSort(long a[],int size) { int i; for (i = size / 2; i > 0; i--) /*自下而上地调整堆*/ HeapAdjust(a, i, size); for (i = size; i > 1; i--) { a[0] = a[1];a[1] = a[i];a[i] = a[0]; HeapAdjust(a, 1, i-1); } } void HeapAdjust(long a[], int i, int size)/*对结点i进行下滤*/ { a[0] = a[i];/*a[0]不存放结点*/ int Parent=i,Child=2*Parent; while( Child <= size) {/*当左孩子存在时*/ if ((Child < size) && (a[Child + 1] < a[Child])) Child++; if (a[Child] >= a[0]) break; a[Parent] = a[Child]; Parent = Child; Child = 2 * Parent; } a[Parent] = a[0]; }
相关文章推荐
- POJ 1085 Triangle War 极小极大值算法+α-β剪枝
- hdu 1085 Holding Bin-Laden Captive!
- HDU 1085 Holding Bin-Laden Captive! 母函数③
- HDU--1085 (母函数)
- hdu 1085 Holding Bin-Laden Captive!
- HDU 1085
- UVA 1085 House of Cards(对抗搜索)
- HDU 1085(暴力;找规律;树状数组;母函数)
- [ACM] hdu 1085 Holding Bin-Laden Captive! (母函数变形)
- HDOJ 1085 Holding Bin-Laden Captive!
- HDOJ 题目1085 Holding Bin-Laden Captive!(母函数)
- hdu 1085 Holding Bin-Laden Captive! (母函数)
- [BZOJ 1085][SCOI2005]骑士精神(IDA*)
- pat 1085
- HDU 1085 Holding Bin-Laden Captive!
- 【HDOJ 1085】数学问题,母函数
- 九度OJ 题目1085:求root(N, k)
- 杭电 acm 1085 Holding Bin-Laden Captive!
- 欧拉定理http://acm.fjnu.edu.cn/problem.php?id=1085
- hdu1085 多重部分和问题