解题思路:

        自定义二级排序,优先比出生年月。

参考代码 ① :    

#include<bits/stdc++.h> /* 525 ms 使用 string */  
using namespace std;
const int len = 100010;

struct person {
	string num;
	string bro;
} datas[len];

int cmp(person perst, person pernd) {
	if (perst.bro == pernd.bro)
		return perst.num > pernd.num;
	else
		return perst.bro > pernd.bro;
}

int main() {
	int num; cin >> num;
	for (int i = 0; i < num; i++) {
		datas[i].num.resize(19);
		scanf("%s", &datas[i].num[0]);
		datas[i].bro = datas[i].num.substr(6, 8);
	}

	sort(datas, datas + num, cmp);
	for (int i = 0; i < num; i++)
		puts(datas[i].num.c_str());
}


参考代码 ② :    

#include<bits/stdc++.h> /* 176 ms 使用 C 风格字符串 */
using namespace std;
const int len = 100010;

struct person {
	char num[19];
	char bro[9];
} datas[len];

int cmp(person perst, person pernd) {
	if (!strcmp(perst.bro, pernd.bro))
		return strcmp(perst.num, pernd.num) > 0;
	else
		return strcmp(perst.bro, pernd.bro) > 0;
}

void cpy(char num[], char bro[]) {
	int bro_num = 6, index = 0;
	while (bro_num < 14)
		bro[index++] = num[bro_num++];
}

int main() {
	int num; scanf("%d", &num);
	for (int i = 0; i < num; i++) {
		scanf("%s", datas[i].num); cpy(datas[i].num, datas[i].bro);
	}

	sort(datas, datas + num, cmp);
	for (int i = 0; i < num; i++)
		puts(datas[i].num);
}


点赞(1)
 

0.0分

8 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

赶在日落下山前 1年前 回复TA
为啥适用string时间会比适用c风格耗时长啊