运算符重载排序结构体TOJ1469

1.jpg

2.jpg

题目解析
对n个木桩按双标准排序(先满足长度,再满足重量),之后贪心策略为每次找出一组木桩,使组内满足且,这样组内换木桩就不需要重新安装,剩下的木桩再进行寻找,直到所有木桩都属于某个组。
代码:

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;

class Node{
    public:
    int x,y;
    Node(){}
    bool operator < (const Node n) const{//重载<,便于排序
      if(x==n.x) return y< n.y;
        return x < n.x;
    }
};

Node node[5005];
int cases,n,flag[5005];

int main()
{
    cin>>cases;//输入样例数
    while(cases--){
        cin>>n;//输入木桩数
        for (int i = 0; i < n;i++)
            cin>>node[i].x>>node[i].y;//每个木桩的长度与重量
        sort(node, node + n);//升序排序
        memset(flag, 0, sizeof(flag));//表示某个木桩是否属于某个组,0表示没有
        int ans = 0;
        for (int i = 0; i < n;i++){
            if (flag[i] == 0){//该木桩暂时不属于某个组
                int p =node[i].y;
                for (int j = i; j < n;j++){//尽量找到更多的可以归为同一组的木桩
                    if(flag[j]==0&&node[j].y >=p){
                        p = node[j].y;
                        flag[j] = 1;
                    }
                }
                ans++;//找到一个新的组,总时间增加
            }
        }
        cout << ans << endl; //输出结果
    }
    system("pause");
    return 0;
}

其中,重载"<"的代码对于双标准排序起了重要作用,这是菜鸡第一次明白运算符重载是如此使用的。

 bool operator < (const Node n) const{//重载<,便于排序
      if(x==n.x) return y< n.y;
        return x < n.x;
    }

记下一篇博客网址以供日后学习:
https://www.runoob.com/cplusplus/cpp-overloading.html

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。 重载声明是指一个与之前已...
    资深小夏阅读 544评论 0 0
  • 运算符重载(Operator Overloading) 操作符重载的要点 操作符的通用语法 双目操作符:<左操作数...
    DBreak阅读 1,767评论 0 1
  • C++类和对象 C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心...
    863cda997e42阅读 768评论 0 4
  • 所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能,因此,一个函数名就可以用...
    木鱼_cc阅读 473评论 0 0
  • C++运算符重载-上篇 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符和二元逻辑运算符4...
    Haley_2013阅读 2,395评论 0 51

友情链接更多精彩内容