V

来源:互联网 发布:失物招领网站源码 编辑:程序博客网 时间:2024/04/24 12:30

Description

An integer interval [a,b], a < b, is a set of all consecutive integers beginning with a and ending with b. 
Write a program that: finds the minimal number of elements in a set containing at least two different integers from each interval.

Input

The first line of the input contains the number of intervals n, 1 <= n <= 10000. Each of the following n lines contains two integers a, b separated by a single space, 0 <= a < b <= 10000. They are the beginning and the end of an interval.

Output

Output the minimal number of elements in a set containing at least two different integers from each interval.

Sample Input

43 62 40 24 7

Sample Output

4
题意:
找一个数组,使数组里至少有两个整数属于间隔,每个间隔里的两个数都在这个数组

分析:
贪心,先按照b从小到大排序,在将数组里的数跟后面的间隔前两个比较

代码:

#include<stdio.h>#include<algorithm>using namespace std;struct node{int x;int y;}b[100001];bool cmp(node a,node b){return a.y<b.y;}int main(){int n,j,i,m[10001];scanf("%d",&n);for(i=0;i<n;i++)scanf("%d%d",&b[i].x,&b[i].y);sort(b,b+n,cmp);m[0]=b[0].y-1;m[1]=b[0].y;j=0;for(i=1;i<n;i++){  if(b[i].x<=m[j]&&m[j+1]<=b[i].y)     {continue;     }   if(m[j+1]>=b[i].x&&m[j]<b[i].x){   m[j+2]=b[i].y;   j=j+1;}    if(m[j+1]<b[i].x){      m[j+2]=b[i].y-1;   m[j+3]=b[i].y;   j=j+2;}}printf("%d\n",j+2);}
感受:
挺简单的,就是题意一开始没有读懂。。。。

0 0