【模板】比较大小之重载运算符和重写cmp (大整数排序、Excel排序、开门人和关门人题解)

L2-009 抢红包 (25分) 没有人没抢过红包吧…… 这里给出N个人之间互相发红包、抢红包的记录,请你统计一下他们抢红包的收获。 输入格式: 输入第一行给出一个正整数N(≤10​4​​ ),即参与发红包和抢红包的总人数,则这些人从1到N编号。随后N行,第i行给出编号为i的人发红包的记录,格式如下: KN​1​​ P​1​​ ⋯N​K​​ P​K​​ 其中K(0≤K≤20)是发出去的红包个数,N​i​​ 是抢到红包的人的编号,P... 阅读详情

方法1:重载运算符。

方法2:重写cmp函数。

关于strcmp函数(C/C++函数):

设这两个字符串为str1,str2,

若str1=str2,则返回零;

若str1<str2,则返回负数;

若str1>str2,则返回正数。

大整数排序

对N个长度最长可达到1000的数进行排序。

输入描述

输入第一行为一个整数N,(1<=N<=100)。

接下来的N行每行有一个数,数的长度范围为1<=len<=1000。

每个数都是一个正数,并且保证不包含前缀零。

输出描述

可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。

输入

3
11111111111111111111111111111
2222222222222222222222222222222222
33333333

输出

33333333
11111111111111111111111111111
2222222222222222222222222222222222
//大整数排序 
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct Str{
	string s;
	int len;
	bool operator < (const Str &a)const{
		if(len!=a.len) return len<a.len;
		else return strcmp(s.c_str(),a.s.c_str())<0;
	}
};
Str s[101];
int main(void){
	int N;
	while(cin>>N){
		string str;
		for(int i=0;i<N;i++)
		{
			cin>>str;
			s[i].s=str;
			s[i].len=str.length();
		}
		sort(s,s+N);
		for(int i=0;i<N;i++){
			cout<<s[i].s<<endl;
		}
	}
	return 0;
}
//大整数排序 
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(string a,string b)
{
    if(a.length()!=b.length())
        return a.length()<b.length();
    else
        return a<b;//string类可以字典序直接比较 
}
int main()
{
    int N;
    while(cin>>N)
    {
        getchar();
        string a[101];
        for(int i=0;i<N;getline(cin,a[i++]));
        sort(a,a+N,cmp);
        for(int i=0;i<N;cout<<a[i++]<<endl);
    }
}

Excel排序

题目描述

    Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。     对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始)。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3 时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。

输入描述

    测试输入包含若干测试用例。每个测试用例的第1行包含两个整数 N (N<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号。以下有N行,每行包含一条学生纪录。每条学生纪录由学号(6位数字,同组测试中没有重复的学号)、姓名(不超过8位且不包含空格的字符串)、成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开。当读到 N=0 时,全部输入结束,相应的结果不要输出。

输出描述

    对每个测试用例,首先输出1行“Case:”。随后在 N 行中输出按要求排序后的结果,即:当 C=1 时,按学号递增排序;当 C=2时,按姓名的非递减字典序排序;当 C=3
时,按成绩的非递减排序。当若干学生具有相同姓名或者相同成绩时,则按他们的学号递增排序。

输入

3 1
000007 James 85
000010 Amy 90
000001 Zoe 60

输出

Case:
000001 Zoe 60
000007 James 85
000010 Amy 90
//EXCEL排序 
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Record{
	char id[7];//注意学号是6位数,如果数组设定太小了,不能存储‘\0’终止符号 
	char name[9];
	int grade;
};
bool cmp1(Record a,Record b){
	return strcmp(a.id,b.id)<0;
}
bool cmp2(Record a,Record b){
	if(a.name!=b.name) return strcmp(a.name,b.name)<0;
	else return strcmp(a.id,b.id)<0;
}
bool cmp3(Record a,Record b){
	if(a.grade!=b.grade) return a.grade<b.grade;
	else return strcmp(a.id,b.id)<0;
}
Record r[100001];
void action(int type,Record r[],int n){
	switch(type){
		case 1:sort(r,r+n,cmp1);break;
		case 2:sort(r,r+n,cmp2);break; 
		case 3:sort(r,r+n,cmp3);break;
	}
}
int main(void) 
{
	int cases=0;
	int N;
	while(scanf("%d",&N)!=EOF){
		cases++;
		if(N==0) break;
		int type;
		cin>>type;
		for(int i=0;i<N;i++){
			scanf("%s%s%d",&r[i].id,&r[i].name,&r[i].grade);
		}
		action(type,r,N);
		printf("Case:\n",cases);
		for(int i=0;i<N;i++){
			printf("%s %s %d\n",r[i].id,r[i].name,r[i].grade);
		}
	}
	return 0;
}

开门人和关门人

题目描述

    每天第一个到机房的人要把门打开,最后一个离开的人要把门关好。现有一堆杂乱的机房签到、签离记录,请根据记录找出当天开门和关门的人。

输入描述

每天的记录在第一行给出记录的条目数M (M > 0 ),下面是M行,每行的格式为     证件号码 签到时间 签离时间 。其中时间按“小时:分钟:秒钟”(各占2位)给出,证件号码是长度不超过15的字符串。

输出描述

对每一天的记录输出1行,即当天开门和关门人的证件号码,中间用1空格分隔。

注意:在裁判的标准测试输入中,所有记录保证完整,每个人的签到时间在签离时间之前,且没有多人同时签到或者签离的情况。

输入

3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:40

输出

SC3021234 CS301133

 注意点

1. 巧用字符串比较。

2. 此题实际上没有必要用排序。

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
struct Record{
	string id; 
	char in[30];
	char out[30];
};
bool cmp1(Record a,Record b)
{
	return strcmp(a.in,b.in)<0;//按照到的时间从小到大 
}
bool cmp2(Record a,Record b)
{
	return strcmp(a.out,b.out)<0;//按照离开的时间从小到大 
}
Record record[1001];
int main(void)
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>record[i].id>>record[i].in>>record[i].out;
	}
	sort(record,record+n,cmp1);
	cout<<record[0].id<<" ";
	sort(record,record+n,cmp2);
	cout<<record[n-1].id<<endl;
	return 0; 
 } 

 

Gradle进阶:4:结合Sonarqube进行代码审查 作为代码质量检查的流行工具,比如Sonarqube能够检查代码的“七宗罪”,跟代码结合起来能够更好地提高代码的质量,这篇文章将会介绍如何结合gradle和sonarqube对代码质量与测试覆盖率进行分析。 阅读详情

相关推荐

IntelliJ IDEA 中git使用说明书

IntelliJ IDEA 中git使用说明书

junyang2012的博客 5389

【C++】运算符重载案例 - 字符串类 ⑤ ( 重载 大于 > 运算符 | 重载 小于 < 运算符 | 重载 右移 >> 运算符 - 使用全局函数重载 | 代码示例 )

一、重载 大于号 / 小于号 运算符 - 使用成员函数重载 1、重载 大于 > 运算符 2、重载 小于 < 运算符 二、重载 右移 >> 运算符 - 使用全局函数重载 三、完整代码示例 1、String.h 类头文件 2、String.cpp 类实现 3、Test.cpp 测试类

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 4211

Xilinx Vitis 2020.1头文件路径配置避坑指南:解决#include找不到文件的常见问题

本文针对Xilinx Vitis 2020.1开发环境中常见的#include头文件找不到问题,提供了系统的避坑指南。文章深入解析了Vitis的头文件搜索机制,对比了通过工程属性GUI、修改编译命令及使用环境变量三种配置方法的优劣与隐藏陷阱,并给出了高级场景的排查流程与工程结构最佳实践,帮助开发者高效解决路径配置难题。

weixin_28831399的博客 570

【已解决】C语言结构体排序cmp模板

一般在结构体排序中,会有相应的结构体排序的说明,比如说:先比较学生的成绩,如果成绩相同,那么我们将按照名字的字典升序排列。这时,我们就必须先比较成绩,后按字典序排列,

执念斩长河 719

金融行业软件测试面试题(含答案)

6、假如发现了一个BUG,跟开发本身没什么关系,涉及到理念,需求问题,如何解决?11、假如要你测试6个月期限的p2p借款产品,你应该怎么设计案例,说出测试点。17、如果京东有一个购物网页给你,你要怎么进行测试?31、我们公司自动化测试用的语言是Java,Java你不会,该怎么办?23、你们测试用的测试环境是谁给的?24、如果领导分配你的任务超出负荷,领导高估了你的能力,怎么办。26、给你一个模块测试,只有一个星期的时间你如何有效率地完成?29、如果你组长的用例写错了,但他认为是对的,你怎么处理?

crhnb的博客 915

Spring Boot与Apache Ignite集成:构建高性能分布式缓存和计算平台

Apache Ignite是一个高性能的分布式内存计算平台,支持内存缓存、分布式计算、流处理和机器学习等功能。它提供了低延迟的数据访问和强大的计算能力,适用于需要高性能和可扩展性的应用。将Apache Ignite集成到Spring Boot应用中,可以显著提高应用的性能和可扩展性。Spring Boot的简单配置和Ignite的强大功能相结合,使得开发和部署更加高效。首先,创建一个新的Spring Boot项目。可以通过Spring Initializr(https://start.spring.io/)

九天的专栏 2142

c++二维vector用特定元素排序时sort中cmp的重写

Method 1: class Solution { public: vector<int> filterRestaurants(vector<vector<int>>& restaurants, int veganFriendly, int maxPrice, int maxDistance) { int size=...

cc_cc_cc_cc_cc_的博客 1583

PDF批量加水印 与 去除水印实践

我们可以给PDF加图片水印或文字水印,要去除图片水印,一般只需要删除最后一个图片对象即可。要去除文字水印,需要保证主体内容和文字水印在/Contents中位于不同的对象内,这样我们只需要删除文字水印对应的对象即可删除水印。而对于主体内容和文字水印已经混合在一个对象时,本文的提供的方法则无能为力,需要进一步深入分析PDF细节。

小小明-代码实体的专栏 2756

STL工具库使用解析系列之二:自定义比较函数的两种方式(重载和仿函数)

C++比C不仅多了面向对象支持class类编程,还支持泛型编程,以及提供丰富的STL开发工具库。泛型是一种在编译期间动态具体化的技术,使得一些通用算法或数据结构的封装变得十分方便。在C++标准中指出,当一个模板不被使用时,它就不应该被具体化。对于模板在编译期间如何特化,其实用到的概念诸多,比如“惰性求值”和“模式匹配”,两点关键: 1.对于函数模板: 确定特化的参数类型是隐式传进去的,编译器将根

墨篙和小奶猫 1052

ubuntu18.04 显卡驱动问题 造成屏幕分辨变大 NVIDIA-SMI has failed because it couldn't communicate with ....等问题

问题1:装好了显卡驱动,cudnn,tensorflow等没问题,一直可以用。但是突然有一天不行了,终端输入:nvidia-smi 显示:NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed...

梦萦飞--CV/DL/ML 2248

YOLOv13涨点改进| CVPR 2026 |独家创新首发、主干改进篇 |利用RIS-PiDiNet主干让YOLOv13更加强大!适合遥感目标检测、小目标检测、旋转目标检测,变化检测,图像分割涨点

🔥本文提出了一种改进的RIS-PiDiNet主干网络,通过引入几何先验构建几何一致性检测器,显著提升了模型在任意方向、结构规则目标场景下的检测性能。包含两个核心模块:S-PDC利用极谐变换的谐波核建模目标结构对称性,RIS-PDC通过SO(2)群平均实现旋转不变性。网络采用基于RIS-block的主干结构并融合轻量级LBP特征,增强了细粒度结构表达能力。实验表明,该方法特别适用于遥感和复杂几何分布场景,能有效提升目标检测的鲁棒性和精度。文章还详细介绍了如何将RIS-PiDiNet集成到YOLOv13框架

Ai缝合怪、助力小伙伴高效发论文 90

struct 重写cmp 以及调用sort

++结构部署如图: //**第一步定义结构体** using namespace std; typedef struct stu { string name; int y,m,d,idx; } stu; stu ren[100]; //**第二步重写cmp** bool cmp(stu a,stu b){ if(a.y!=b.y) return a.y<b.y; } //**如上写完后便可以sort引用了** sort(ren+1,ren+100,cmp);

qq_45706306的博客 774

AUTOSAE软件配置-达芬奇( DaVinci Configurator)从新建工程开始

方法1,直接使用案例工程,一般SIP包会有一个创建好的案例工程,在这样的路径YOUR_SIP_DIR/Applications/SipAddon/StartApplication下面直接打开这个*.dpa文件即可看到已经预先做好的工程:但是,这个也不是全的,也不一定完全正确,至少MCAL是没有配置好的(MCAL是IC厂商提供的,并不归属SIP包的一部分)。这样就需要你自己去配置你想要的模块,修改里面的错误。

m0_49148264的博客 2937

c++sort函数及自定义排序

众所周知学会自定义排序能解决很多问题,因为很多程序题里都会涉及到排序但是都不是直接用sort简单就能解决,而会用自定义排序函数后问题能变得简单起来1.sort函数在`c++`头文件``中2.sort函数使用的排序方法是类似于快排,时间复杂度为n*log2(n),执行效率较高;3.sort函数有三个参数 sort(first,last,cmp);first是元素的起始地址,last是结束地址,cmp是排序的方式。对[first,last)(一定要注意这里的区间是左闭开)

Sonderlh的博客 1867

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

sort函数与cmp函数和重载运算符

他有一个特别的定义:“独特瓷器”,即对于一个瓷器 AA,如果不存在另一个瓷器 BB ,其直径和高度都严格大于瓷器 AA 的直径和高度,则称瓷器 AA 为“独特瓷器”。他有一个习惯,就是在每一个瓷器底部都标注上瓷器的直径 dd 和高度 hh。阿坤老师有 N 个瓷器,每个瓷器都有一个直径和高度。接下来的 NN 行,每行包含两个整数,分别表示瓷器的直径 d和高度 h(1≤d,h≤106)。

lebrce的博客 1432

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

结构体sort排序

/定义一个结构体int x;int y;}z[100];}//按照x的大小降序排,可以在cmp函数中用条件判断int x;int y;}//重载小于号,x大的在前面}z[100];

xhz050102的博客 792

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C++ STL介绍(含struct类重载运算符方法)

最近在整理原来的一些资料,偶然想起原来搞OI时讲过一次STL和struct类重载运算符的内容,这里分享给大家 目录 algorithm sort语句及struct类重载运算符 1、通过比较函数cmp实现 2、Struct类中重载运算符 二分查找 去除重复元素、离散化 queue 优先队列(堆) map set、迭代器 bitset 总结 题目推荐 标准模板库(Standard Template Library),惠普实验室开发的一系列软件的统称 在C++标准中,STL被组织为

初学者 5669

【C艹】关于sort用法之重构cmp(comp)函数的笔记

C++关联容器的有序容器对元素关键字的类型有要求,元素关键字的类型必须定义了严格弱序(stick weak ordering)拿内置类型来说,C++都定义了 “

HowToPause的博客 2774

谈谈C/C++中的排序函数的比较函数的写法。切忌不要走火入魔。

首先,我们来谈谈大名鼎鼎的void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *)); 它属于C语言标准库函数,应该是运用最多的了,今天我不是来教你们怎么用qsort的,只是来交流一下排序函数的最后一个参数cmp()(它不仅可以叫cmp,你还可以给他取名叫什么pig啊dog的只要是英文单词都可

Lionel 2645

C++ STL容器(三)之set

C++ STL中的set是一个有序关联的集合容器,使用红黑树(Red-Black Tree,平衡二叉检索树)这种数据结构组织泛化的元素数据。 由于红黑树的良好性质,其中元素检索的时间复杂度为logn(其中n为元素个数) 使用时需用宏语句: #include<set> 一.几种创建set的方法: 1.用默认比较函数对象(默认元素从小到大)来创建空的set; set<in...

weixin_44756457的博客 585

C++多态性(一)运算符重载

<1>运算符重载为成员函数 双目运算符:+,- #include<iostream> using namespace std; class Complex { public: Complex(double r=0.0,double i=0.0):real(r),imag(i){} Complex operator+(const Complex &amp...

猫ER 825

pat乙级1015德才论+C++Set集合Cmp重写+读写txt

真的一道题目引发的血案。。浙大的陈姥姥对java真的很不友好。做pat乙级题目,很多题用Java写都超时。没办法只有又回归C++。然而c++中很多细节我都不是很清楚碰了很多坑,所以研究了一下后写了这篇博客。先上题目吧题目1015. 德才论 (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 ...

Kwong 601

【C++】关于cmp函数的一点细节

值都相同,那么从严格意义上讲,它们是不可区分的。在这种情况下,排序函数的行为确实应该表明这些对象是相等的,以满足严格弱序的要求。如果两个节点在所有比较字段上都相同,并且你没有其他字段来区分它们,排序函数需要明确地处理这些情况,以避免段错误和未定义行为。

m0_73181229的博客 842

C++ sort函数中cmp()比较函数的写法

(部分内容搬运,来源见文章底部) sort函数中的cmp比较函数 sort函数中的比较函数cmp(),即void sort( iterator start, iterator end, StrictWeakOrdering cmp ); sort函数头文件为:#include <algorithm> 其中,cmp函数可以自己编写,自己决定逻辑,包括cmp的命名也是自己决定的。 示例如下: bool cmp(int a ,int b) { return a < b ; 从小到大排序,

weixin_53833977的博客 2万+

【算法】重载sort的cmp的题

在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。(3)有交集的气球,更新终止位置,注意是去右边界的较小者,等到下次再和下一个气球判断,无交集,射出一支箭;

StudyWinter的博客 687

sort函数重写cmp的新题目

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 例如输入数组[3, 32, 321],则打印出这3个数字能排成的最小数字321323。 样例 输入:[3, 32, 321] 输出:321323 注意:输出数字的格式为字符串。 class Solution { public: static bool mycmp(int a,int b){...

Peace619的博客 721
上一篇: 【模板】拓扑排序 (Legal or Not题解)
下一篇: 【模板】二叉排序树
coderwait
博客等级 码龄9年 20粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值