POJ 3069 Saruman's Army

来源:互联网 发布:影集制作软件下载 编辑:程序博客网 时间:2024/06/01 07:45

贪心策略:每一次做标号的点应该是距离最左边的点最远且距离不超过R的点,标记好这个点后,下一段的最左边的点应该是第一个距离标记好的点距离大于R的点。

#include <stdio.h>#include <algorithm>using namespace std;int arr[1010];//升序比较函数int cmp(const void *a, const void *b){int *pa = (int*)a;int *pb = (int*)b;return *pa-*pb;}void solve(int n, int r){int start_i, i, cnt, choose_i;//快排一次qsort(arr, n, sizeof(int), cmp);start_i = 0;cnt = 0;while(1){for(i=start_i; i<n; i++){if(arr[i]-arr[start_i] > r)break;}if(i < n){cnt++;choose_i = i-1;//找下一个最左边的元素for(i=choose_i+1; i<n; i++){if(arr[i]-arr[choose_i] > r)break;}if(i < n){start_i = i;continue;}else{break;}}else{cnt++;break;}}printf("%d\n", cnt);}int main(void){int r, n, i;//freopen("input.dat", "r", stdin);while(scanf("%d %d", &r, &n), !(-1==r&&-1==n)){for(i=0; i<n; i++) scanf("%d", arr+i);solve(n, r);}return 0;}


0 0
原创粉丝点击