NYOJ891-找点

找点
时间限制:2000 ms  |  内存限制:65535 KB
难度:2
描述
上数学课时,老师给了LYH一些闭区间,让他取尽量少的点,使得每个闭区间内至少有一个点。但是这几天LYH太忙了,你们帮帮他吗?

输入
多组测试数据。
每组数据先输入一个N,表示有N个闭区间(N≤100)。
接下来N行,每行输入两个数a,b(0≤a≤b≤100),表示区间的两个端点。
输出
输出一个整数,表示最少需要找几个点。

样例输入
4
1 5
2 4
1 4
2 3
3
1 2
3 4
5 6
1
2 2

样例输出
1
3
1

来源
原创

 

思路:
贪心算法
1.先对区间按照右边界从小到大排序
2.每次取区间的左边界最大值和右边界最小值,如果两个区间刚好相邻,取他们的相交点作为左右边界,
只要每次新的区间的左边界不大于等于原来的右边界,取点总数都不用加1,否则加1
例如:
6
3 4
2 4
3 10
7 9
8 11
8 14
排序后是:
2 4
3 4
7 9
3 10
8 11
8 14
过程:sum=1;
首先,模板为[2,4],3,4加入, 比较左右点,更新为[3,4],此时依旧sum=1;
然后,模板为[3,4],7,9加入, 发现7>4,     此时更新左右边界为[7,9],sum+1=2;
然后,模板为[7,9],3,10加入,比较左右点,无需更新,此时依旧sum=2;
然后,模板为[7,9],8,11加入,比较左右点,更新为[8,9],此时依旧sum=2;
然后,模板为[8,9],8,14加入,比较左右点,不更新,此时sum依旧为2
最终答案便是2
图:

 

 

 

AC代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
   int x,y;
}a[200];
int cmp(node a,node b)
{
    if(a.y!=b.y) return a.y<b.y;
}
int main()
{
    int i,j,n,m1,m2,sum,x;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<n;i++)
        scanf("%d %d",&a[i].x,&a[i].y);
        sort(a,a+n,cmp);

        m1=a[0].x;m2=a[0].y;sum=1;x=0;
        //printf("m1=%d m2=%d\n",m1,m2);
        for(i=1;i<n;i++)
        {
           if(a[i].x<m2&&a[i].x>m1)
           m1=a[i].x;
           else
           {
                  if(a[i].x==m2)
                  {
                     m1=a[i].x;
                     m2=a[i].x;
                  }
                  if(a[i].x>m2)
                  {
                      sum++;
                      m1=a[i].x;
                      m2=a[i].y;
                  }
           }
           //printf("m1=%d m2=%d\n",m1,m2);
        }

        printf("%d\n",sum);
    }
    return 0;
}
时间: 2024-08-30 20:30:19

NYOJ891-找点的相关文章

MathType符号模板找不到了怎么办

  MathType符号模板消失示例 具体操作过程如下: 1.打开MathType软件进入到公式编辑状态,打开方式可以根据自己习惯来决定,可以在Word中通过"插入"--"对象"来完成,也可以双击现有的公式来打开,还可以直接双击MathType桌面图标来打开. 2.在MathType编辑窗口后,在MathType菜单栏中点击"视图"--"符号面板",再点击"视图"会发现"符号面板"的左边

找不到必要的安装文件sku001.CAB

  上周安装office2003升级补丁失败之后,每次再打开Excel都要会找安装文件,并出现"找不到必要的安装文件sku001.CAB"的提示.上网搜索了一下,发现以下修改注册表的方法是可行的,下面把它详细写出来,希望对有此困扰的朋友能有所帮助吧. (当然也可以卸载后重新安装.最好还是尽快升级啦!) 开始 -> 运行 -> 输入regedit -> 打开HKEY_LOCAL_MACHINE -> 打开SOFTWARE -> 打开Microsoft -&g

头文件 函数主体-急!!研究源代码,找不到函数的主体!

问题描述 急!!研究源代码,找不到函数的主体! 为什么用sourcelight察看源代码会发现有些函数只在头文件中定义了,但却找不到函数的主体? /* database handling */ extern int cl_load(const char *path, struct cl_engine **engine, unsigned int *signo, unsigned int options); extern const char *cl_retdbdir(void); 就是这两个函数

数据-android 地铁查询怎么查,接口在哪里找呢

问题描述 android 地铁查询怎么查,接口在哪里找呢 比如查询广州地铁,貌似不提供接口啊,数据或功能都是从哪里来了,我现在在做这方面,接口都没有.. 解决方案 你还是选择跟人家谈谈合作吧,这类接口,不是你随便能得到的 解决方案二: 当然不排除自己做数据库,自己把所有线路采集到你们自己的数据库,自己查 解决方案三: 自己采集数据去啊 .差距不大的. 解决方案四: 可以去聚合数据和易源API看看 解决方案五: 上百度api store查查,应该会有

Word中MathType菜单消失该怎么找回来?

  在使用MathType编辑公式时,有许多朋友都会对MathType出现的一些问题无法解决,比如Word中MathType菜单项突然消失了,如何才能找回来? 1.先卸载MathType再重新安装MathType,MathType会在相应office surpport目录下添加WordCmds.dot,MathType Commands 6 For Word.dot,MathPage目录下添加"32"文件夹中(或者"64"具体看自己电脑的安装情况)MathPage.

如何使用java找出段首句和段尾句

问题描述 如何使用java找出段首句和段尾句 最近要实现一个自动摘要算法,需要找出段首句和段尾句,并给他们赋予权重,所以如何找出段首句和段尾句?(ps:从网上爬下来的文档分段不是很分明,但是两个句子之间空有有四个字节) 解决方案 句子之间一般是通过标点符号,或者html的p span br之类分割的,你要找到规律.

反射 程序集-成功添加程序集到缓存中 但assmbly找不到该文件

问题描述 成功添加程序集到缓存中 但assmbly找不到该文件 成功将DLL添加到程序集中了.但是C:Windowsassembly目录下找不到该DLL

[android]android工程引用第三方jar提示找不到相关class的解决方法

使用第三方jar包  步骤:  方法1:Eclipse下, 右键工程, Build path, java build path,选择libraries 在右边的按钮中点击"Add Library" 选择"User library",点击"下一步" 点击"User librarys"按钮 在出现的界面中点击"New.."按钮 在弹出的界面中随便起一个名字,点击"确定" 点击"Ad

笔记本找不到移动硬盘怎么办

  笔记本找不到移动硬盘怎么办          笔记本找不到移动硬盘的解决方法一: 1.首先我们来看一下在电脑出现故障时插入移动硬盘时的情况,会发现只显示部分盘符,由于小编的移动硬盘被分成四个分区,而在此只显示两个盘符. 2.右键单击"计算机",从弹出的菜单中选择"管理"项. 3.接着在无法正常显示的磁盘上右击,从弹出的菜单中选择"更改驱动器号和路径". 4.在打开的窗口中点击"添加"按钮,然后为当前分区指定一个"

Excel提示“找不到D:\MY.XLSX”的解决办法

  双击EXCEL打开一个XLS电子表格,弹出"找不到D:MY.XLSX"文件名的拼写,并检查文件位置是否正确.如果您正试图从最近使用的文件列表中打开该文件,请确保该文件未被重命名.移动或删除. 延伸:xlsx文件怎么打开? 难道真是文件名拼写不对?或者位置不正确?或者删除被移动?我的解决办法添加个%1就解决了.下面请看详细步骤: 解决办法:"我的电脑-工具-文件夹选项"->文件类型,找到扩展名为XLS: 查找扩展名xls 然后选择"高级"