4 条题解

  • 4
    @ 2023-7-27 14:04:46

    解析:

    每个比赛的起始和终止时间,可以看成线段的起点和终点。

    两个比赛不能同时参加,相当于线段不能相交。

    定义结构体保存所有线段
    对所有线段按照右端点从小到大排序
    选择区间右端点r初始化为0
    遍历所有线段
        如果当前线段左端点大于等于r
            输出当前线段的id
    

    题解

    #include <iostream>
    #include <algorithm>
    using namespace std;
    struct node
    {
        int id;
        int l, r;
    };
    node a[105];
    bool cmp(node x, node y)
    {
        return x.r < y.r;
    }
    int main()
    {
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++)
        {
            cin >> a[i].id >> a[i].l >> a[i].r;
        }
        sort(a + 1, a + n + 1, cmp);
        int r = 0;
        for (int i = 1; i <= n; i++)
        {
            if (a[i].l >= r) // 如果当前线段左端点大于等于r,则代表这是一个独立的区间
            {
                r = a[i].r;
                cout << a[i].id << " ";
            }
        }
        return 0;
    }
    
    • 1
      @ 2023-7-27 22:07:43

      思路:

      先把所有比赛的时间转化成线段

      然后把它们放在一条数轴上

      通过分析样例,可以发现:

      优先选取线段右端点离原点较近的

      选取完以后,把原点挪到右端点的位置接着判断,如果有线段的左端点比原点小,那么说明这条线段与上条线段重合了,否则说明不重合,选取这条线段,移动原点,重复操作直到判断完最后一条线段

      #include <iostream>
      #include <algorithm>
      using namespace std;
      
      struct match
      {
          int id,l,r;
      };
      match a[105];
      
      bool cmp(match a,match b)
      {
          return (a.r < b.r);//将右端点由小到大排序
      }
      
      int main()
      {
          int n;
          cin >> n;
          for(int i = 0;i < n;i++)
              cin >> a[i].id >> a[i].l >> a[i].r;
          sort(a,a + n,cmp);
          int r_index = 0;
          for(int i = 0;i < n;i++)
          {
              if(a[i].l >= r_index)//左端点不在原点后面(没相交)
              {
                  r_index = a[i].r;//更新原点
                  cout << a[i].id << ' ';//输出
              }
          }
          return 0;
      }
      
      • 1
        @ 2023-7-27 18:38:18

        yasuo👀️

        看我把图都贴过来了,真是十分细心(请允许我稍稍自恋一下😄 )

        image

        #include <iostream>
        #include <algorithm>
        struct node{int id,l,r;}a[105];
        bool cmp(node q,node a){return q.r<a.r;}
        int main(){
            int q,r=0;std::cin>>q;
            for(int i=0;i<q;i++)std::cin>>a[i].id>>a[i].l>>a[i].r;
            std::sort(a,a+q,cmp);
            for (int i=0;i<q;i++)
                if(a[i].l>=r){r=a[i].r;std::cout<<a[i].id<<" ";}
            return 0;}
        
      • 0
        @ 2023-7-28 16:50:26
        #include <iostream>
        #include <algorithm>
        struct fiveline{int id,l,r;}a[105];
        bool wuhang(fiveline q,fiveline a){return q.r<a.r;}
        int main(){int q,r=0;std::cin>>q; for(int i=0;i<q;i++)std::cin>>a[i].id>>a[i].l>>a[i].r; std::sort(a,a+q,wuhang);for (int i=0;i<q;i++)if(a[i].l>=r){r=a[i].r;std::cout<<a[i].id<<" ";}return 0;}
        

        5 行 流

      • 1

      信息

      ID
      345
      时间
      1000ms
      内存
      256MiB
      难度
      4
      标签
      递交数
      769
      已通过
      326
      上传者