1 条题解
-
0c++淦 LV 6 @ 2022-02-14 22:21:23
尽量在重叠区间种树,且重叠位置要在区间尾部。
所以,我们先把结束位置排序一波,止呕从第一个区间尾部开始种树,下一刻区间差多少棵树就在尾部种几棵,最后输出ans即可
#include<bits/stdc++.h>
using namespace std;
int n,m,s,ans,book[101010];
struct note
{
int b;
int e;
int t;
}a[101010];
bool cmp(note x,note y)
{
return x.e<y.e;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i].b>>a[i].e>>a[i].t;
}
sort(a+1,a+m+1,cmp);
for(int i=1;i<=m;i++)
{
s=0;//统计已选点的个数
for(int j=a[i].b;j<=a[i].e;j++)
{
if(book[j]!=0)
{
s++;
}
}
if(s>=a[i].t)
{
continue;
}
for(int j=a[i].e;j>=a[i].b;j--)
{
if(book[j]==0)
{
book[j]=1;
s++;
ans++;
if(s==a[i].t)
{
break;
}
}
}
}
cout<<ans;
return 0;
}
- 1