题目大意:给你n个点和一把刷子,设刷子底部y坐标是a,那个一次刷子就可以刷掉y坐标从a到a+w的所有点,问你最少需要几次;
题目解析:我们首先要对点的y坐标进行排序,并且x坐标其实没用,所以还需要去重,所以可以用set作为他们的容器,接下来就是贪心,第一次刷子的底部肯定是与y坐标最小的那个点一样,接下来我们每次就要找这个刷子上面y坐标最小的那个点再更新刷子的底部,如此遍历即可;
AC代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<set>
using namespace std;
set<int>s;
int main()
{
int cas,c,i,x,y,ans,n,w;
scanf("%d",&cas);
for(c=1;c<=cas;c++)
{
s.clear();
scanf("%d%d",&n,&w);
for(i=0;i<n;i++)
{
scanf("%d%d",&x,&y);
s.insert(y);
}
ans=1;
x=*s.begin()+w+1;
set<int>::iterator it=s.begin();
while(it!=s.end())
{
if(*it>=x)
{
x=*it+w+1;
ans++;
}
it++;
}
printf("Case %d: %d\n",c,ans);
}
return 0;
}