题意:
有n条长度为1的线段,确定他们的起点,必须是整数,使得第i条线段在[ri,di]之间。最后输出空隙的最小值
分析:
原始数据排序,排序的规则是先按照右端点排序,右端点相同的情况下,再按照左端点排序。然后最左边开始遍历线段,判断第一个右端点是否小于第二个左端点,如果小于,则中间肯定有空隙,标记加1。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct Node{ int l,r;};Node node[100010];int cnt=0;int n;bool cmp(Node a,Node b){ if(a.r==b.r) return a.l<b.l; else return a.r<b.r;}int main(){ int t; scanf("%d",&t); while(t--) { scanf("%d",&n); int i; for(i=0;i<n;i++) scanf("%d%d",&node[i].l,&node[i].r); sort(node,node+n,cmp); cnt=0; int r1=node[0].r; for(i=1;i<n;i++) { if(node[i].r!=r1) { if(r1<node[i].l) { cnt++; r1=node[i].r; } else { r1++; } } } printf("%d\n",cnt); }}
时间: 2024-10-12 02:00:15