#贪心算法之线型覆盖类问题#
NOI经典题目——摄像头系列1、2、3;
线性类以排序方法为核心,其代码简单,建议使用sort快排;
#include<bits/stdc++.h>
using namespace std;
struct node
{
int x,y;
}
d[100002];
cmp(node a,node b)
{
return a.y<b.y;
}
int main()
{
int n;
int sum=1;
cin>>n;
for(int i=1;i<=n;i++)
cin>>d[i].x>>d[i].y;
sort(d+1,d+n+1,cmp);
int now=d[1].y;
for(int i=2;i<=n;i++)
{
if(now<d[i].x)
{
sum++;
now=d[i].y;
}
}
cout<<sum;
}
//摄像头1//
#include<bits/stdc++.h>
using namespace std;
long long n,ans=1,now,l,mxy;
struct node{
long long x;
long long y;
}sxt[100100];
bool cmp(node a,node r)
{
if(a.x==r.x) return a.y>r.y;
return a.x<r.x;
}
long long solve(){
if(sxt[1].x>0) return -1;
now=sxt[1].y;
mxy=sxt[1].y;
if(now>=l) return ans;
long long i=2;
while(true){
for(;i<=n&&sxt[i].x<=now;i++)
mxy=max(mxy,sxt[i].y);
if(mxy<=now) return -1;
ans++;
now=mxy;
if(now>=l) return ans;
}
return -1;
}
int main()
{
cin>>n>>l;
for(long long i=1;i<=n;i++)
cin>>sxt[i].x>>sxt[i].y;
sort(sxt+1,sxt+1+n,cmp);
cout<<solve();
}
//摄像头2//
#include<bits/stdc++.h>
using namespace std;
struct node
{
long long x,y;
}
d[1000001];
cmp(node a,node b)
{
return a.y<b.y;
}
int main()
{
long long n;
long long sum=1;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&d[i].x,&d[i].y);
sort(d+1,d+n+1,cmp);
long long end=d[1].y;
for(int i=2;i<=n;i++)
{
if(d[i].x>=end)
{
end=d[i].y;
sum++;
}
}
printf("%d",sum);
}
//摄像头3//
第一次写csdn上的博客,多支持一下,谢谢啦!