NYOJ 891 找点

来源:互联网 发布:淘宝店小二怎么联系 编辑:程序博客网 时间:2024/05/01 22:32

题目链接
基于贪心算法的几类区间覆盖问题
属于第三类问题,将右端点按照升序排列,左端点降序排列,从而获得长度最短的线段,只要保证后面的线段的起点小于每次第一次扫描的线段的右端点,就可以保证有交点,扫描几次就是有几个符合条件的点了。。
附代码

#include<stdio.h>#include<math.h>#include<iostream>#include<algorithm>#include<string.h>using namespace std;struct Node{    int st,en,visit;}p[110];int cmp(Node a,Node b){    if(a.en==b.en)        return a.st>b.st;    return a.en<b.en;}int main(){    int n;    while(~scanf("%d",&n))    {        int ans=0;        memset(p,0,sizeof(p));        for(int i=1;i<=n;i++)        {            scanf("%d %d",&p[i].st,&p[i].en);        }        sort(p+1,p+n+1,cmp);        for(int i=1;i<=n;i++)        {            if(p[i].visit==0)            {                ans++;                p[i].visit=1;                //int start=p[i].st;                for(int j=i+1;j<=n;j++)                {                    if(p[j].visit==0&&p[j].st<=p[i].en)                    {                       //if(p[j].st>p[i].st)                            //start=p[j].st;                        p[j].visit=1;                    }                }            }        }        printf("%d\n",ans);    }    return 0;}
0 0
原创粉丝点击