2 solutions

  • 3
    @ 2026-6-15 21:57:30

    ysh牛逼

    
    ```cpp
    #include<bits/stdc++.h>
    using namespace std;
    
    const int N=1e5+10;
    
    struct yshnb{
        int begin;
        int end;
    }dsjnb[N];
    
    bool cmp(yshnb &a,yshnb&b)
    {
        return a.end < b.end;
    }
    
    int main()
    {
        int n;
        cin>>n;
    
        int index=0;
        while(n--)
        {
            int l,r;
            cin>>l>>r;
            dsjnb[index++]={l,r};
        }
        sort(dsjnb,dsjnb+index,cmp);
    
        int last_end=dsjnb[0].end;
        int cnt=1;
        for(int i=1;i<index;i++)
        {
            int p=dsjnb[i].begin;
            int q=dsjnb[i].end;
    
            if(last_end<=p)
            {
                cnt++;
                last_end=q;
            }
        }
    
        cout<<cnt<<"\n";
    
        return 0;
    }
    
    • 2
      @ 2026-6-9 15:55:53

      P1001 67的活动

      一.解题思路

      1.碎碎念

      读完题发现是一道很典型的贪心题,但是秉承着能暴力绝不多想的不信邪精神(说不定社长给的测试集很小,范围只是吓唬人呢),还是随手写了个漏洞百出的暴力试了一下,看到两个TLE就放心了 (题解如果帮助到你的话可以点个赞嘛✨)

      2.题目分析

      重新回到题目,意思很简单,就是找出能在同一时间里完成的最多活动

      因为每个活动都是一分,所以核心就是每次优先选择结束时间最早的活动(结束时间越早,剩余时间越长,能够参加更多活动)

      3.算法实现

      1.将所有活动按照结束时间排序(核心重点)

      2.当前时间记录为**-1**(范围是0<=L<R,所以不能0)

      3.遍历排序后所有活动,合法(时间不冲突)就选上

      4.更新当前时间

      4.复杂度

      1.时间:O(nlogn)

      2.空间:O(n)

      二.完整代码

      PS:非专业题解!有任何错误记得联系我!!!

      • 1

      Information

      ID
      2
      Time
      1000ms
      Memory
      256MiB
      Difficulty
      2
      Tags
      # Submissions
      37
      Accepted
      18
      Uploaded By