LightOJ1016-Brush (II)-greedy,sort

来源:互联网 发布:阳春网络问政平台官网 编辑:程序博客网 时间:2024/05/21 17:00

题目大意:给你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;}


0 0
原创粉丝点击