1121: 最小区间覆盖问题
本题是区间贪心的一种:在满足覆盖[LR]区间的情况下,最少能选择多少个区间?
自己写的死活通不过
#include <bits/stdc++.h>
using namespace std;
struct node{
int l,r;
}T[100005];
bool cmp(node a, node b ){
return a.l<b.l;
}
int main(){
int i,n,max_reach,r_current,ans,L,R;
while(scanf("%d%d%d",&n,&L,&R)!=EOF){
for(i=0;i<n;i++)
{
scanf("%d%d",&T[i].l,&T[i].r);}
if(L==R){
ans=-1;
for(i=0;i<n;i++){
if(T[i].l<=L&&T[i].r>=R){
ans=1;
break;
}
}
printf("%d\n",ans);
continue;
}
sort(T,T+n,cmp);
r_current=L,i=0,ans=0;
while(r_current<R){
for(max_reach=-1e9;i<n&&T[i].l<=r_current;i++){
max_reach = max(max_reach,T[i].r);
}
if(max_reach<=r_current){
ans=-1; //既然还需要找备用区间,但备用区间没法带来更新,说明完蛋了
break;
}
r_current =max_reach ,ans++;
}
//if(r_current < R) ans=-1;
printf("%d\n",ans);
}
return 0;
}```

浙公网安备 33010602011771号