1 条题解

  • 0
    @ 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

信息

难度
6
分类
贪心 点击显示
标签
递交数
35
已通过
12
通过率
34%
被复制
1
上传者