本文共 762 字,大约阅读时间需要 2 分钟。
简单的贪心,将点进行排序后然后从头开始找,当找到一个点i大于r后在从i-1开始寻找另一半r范围。不断地循环下去,直到i==n-1。题目中会出现重复的点,需要去除掉。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int main(){ int r = 0, n = 0; while (r!=-1 && n!=-1) { scanf("%d %d", &r, &n); if (r == -1 && n == -1) { break; } int vis[2000]; int a[2000]; int ans = 0, j = 0; memset(vis, 0, sizeof(vis)); for (int i=0; i<n; i++) { int num; scanf("%d", &num); //去除掉重复的点 if (vis[num] == 0) { vis[num]++; a[j++] = num; } } sort(a, a+j); int i=0; while (i<j) { int s = a[i++]; while (i<j && a[i] <= s+r) { i++; } int p = a[i-1]; while (i<j && a[i] <= p+r) { i++; } ans++; } printf("%d\n", ans); } return 0;}
转载地址:http://pgaq.baihongyu.com/