666
2026-09-12 17:02:56
发布于:广东
题目描述
在一个暴风雨的夜晚,农民约翰的牛棚的屋顶、门被吹飞了。 好在许多牛正在度假,所以牛棚没有住满。 剩下的牛一个紧挨着另一个被排成一行来过夜。 有些牛棚里有牛,有些没有。 所有的牛棚有相同的宽度。 自门遗失以后,农民约翰必须尽快在牛棚之前竖立起新的木板。 他的新木材供应者将会供应他任何他想要的长度,但是供应者只能提供有限数目的木板。 农民约翰想将他购买的木板总长度减到最少。 给出 M(1 <= M <=50) 表示可能买到的木板最大的数目;S(1 <= S <=200) 表示牛棚的总数;C(1 <= C <=S) 表示牛的总数。
输入格式
第 1 行: M ,S 和 C(用空格分开)
第 2 到 C+1行: 每行包含一个整数,表示牛所占的牛棚的编号。
输出格式
单独的一行包含一个整数表示所需木板的最小总长度。
全部评论 1
#include<bits/stdc++.h>
using namespace std;
struct Ques{ // 表示一个问题
int l,r;
};
bool cmp(Ques x,Ques y){
return x.r < y.r; // 以右节点从小到大排序
}
int main(){
int n,m;
cin>>n>>m;
vector<Ques> a(m+1);
for(auto i=1;i<=m;i++){
cin>>a[i].l>>a[i].r;
// 注意题目不保证按顺序输入左右节点
a[i].l = min(a[i].l,a[i].r);
a[i].r = max(a[i].l,a[i].r)-1;
}
sort(a.begin()+1,a.begin()+1+m,cmp);
int lastPlace=INT_MIN,ans=0;
for(auto i=1;i<=m;i++){
if(lastPlace < a[i].l){ans++;lastPlace = a[i].r;}
}
cout<<ans;
return 0;
}2026-09-12 来自 广东
0

有帮助,赞一个