Integer Intervals

来源:互联网 发布:openwrt克隆mac 编辑:程序博客网 时间:2024/06/05 20:42

题目:


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
这个题目和区间选点差不多,只是这个要选两个点。


代码:
#include<cstdio>#include<algorithm>using namespace std;int sum;int x,y,n;struct node {int a;int b;}qu[10100];void select(struct node u[10100]){int i,j;while(n>1){if(x>=u[1].a){for(i=1;i<n-1;i++){u[i]=u[i+1];}n--;}else{if(y>=u[1].a){sum++;x=y;y=u[1].b;for(i=0;i<n-1;i++){u[i]=u[i+1];}n--;}else {x=u[1].b-1;y=u[1].b;for(i=0;i<n-1;i++){u[i]=u[i+1];}n--;sum=sum+2;}}}}bool cmp(node a,node b){return a.b<b.b;}main(){struct node ss[10100];int i;    scanf("%d",&n);sum=0;for(i=0;i<n;i++){scanf("%d%d",&ss[i].a,&ss[i].b);}sort(ss,ss+n,cmp);sum=2;x=ss[0].b-1;y=ss[0].b;select(ss);printf("%d\n",sum);} 

再贴一个错误的:
#include<cstdio>#include<algorithm>using namespace std;int sum;int x,y,n;struct node {int a;int b;}qu[1000];void select(struct node u[1000]){int i,j;while(n>1){if(x>=u[1].a){for(i=1;i<n-1;i++){u[i]=u[i+1];}n--;}else{if(y>=u[1].a){sum++;x=y;y=u[1].b;for(i=0;i<n-1;i++){u[i]=u[i+1];}n--;}else {x=u[1].b-1;y=u[1].b;for(i=0;i<n-1;i++){u[i]=u[i+1];}n--;sum=sum+2;}}}}bool cmp(node a,node b){return a.b<b.b;}main(){struct node ss[1000];int i;    scanf("%d",&n);sum=0;for(i=0;i<n;i++){scanf("%d%d",&ss[i].a,&ss[i].b);}sort(ss,ss+n,cmp);sum=2;x=ss[0].b-1;y=ss[0].b;select(ss);printf("%d\n",sum);} 

没有差别,只是数组大小不一样。但是第二个错了,所以说在不超内存的情况下数组要尽量大。


0 0