标签:
http://poj.org/problem?id=3069
贪心算法
每一轮从起点开始,找到中心点,再推算下一轮的起始点
一轮结果加1
1 #include <stdio.h> 2 #include <algorithm> 3 4 int main() 5 { 6 int r; //半径 7 int n; //节点数 8 while (scanf("%d %d", &r, &n) != EOF) 9 { 10 if (r == -1 && n == -1) 11 break; 12 13 int* arr = new int[n]; 14 15 //输入 16 for (int i = 0; i < n; i++) 17 scanf("%d", &arr[i]); 18 19 //升序排序 20 std::sort(arr, arr + n); 21 22 //处理 23 int ans = 0; //结果 24 int idx = 0; //索引 25 while (idx < n) 26 { 27 //本轮的开始节点 28 int startIdx = idx; 29 idx++; 30 31 //找能到的最远节点 32 while (idx < n && arr[startIdx] + r >= arr[idx]) 33 idx++; 34 35 //本轮的中心点 36 int centerIdx = idx - 1; 37 38 //找下一轮的开始节点 39 while (idx < n && arr[centerIdx] + r >= arr[idx]) 40 idx++; 41 42 ans++; //一轮增加一个节点 43 } 44 45 printf("%d\n", ans); 46 47 48 delete[] arr; 49 } 50 return 0; 51 }
标签:
原文地址:http://www.cnblogs.com/iswoit/p/4482006.html