解题思考K. 奋勇争先续(sort函数使用说明书)

题目描述

Problem Description
还记得上次那个奋勇争先的题目吗,聪明的你帮助老师找出了第一名的同学。

现在,有个类似的问题:
已知每一位同学的解题数量和罚时,这次希望你能输出排名靠前的若干同学的名单。

注:
排名首先依据做题数量,若做题数量相同,则比较罚时,罚时少的排名靠前。

Input
第一行是数据组数CC,代表有CC组测试实例。

每一组数据第一行两个整数NN和MM,NN代表有NN个人的成绩,MM表示老师需要你输出前MM名的名单。

接下来NN行,每一行依次给出名字NameName,做出的题目数量numnum和罚时timetime
( 1<=C<=101<=C<=10, 2<M<=N<=10002<M<=N<=1000, Name的长度最大为1010,1<=num<=101<=num<=10, 10<=time<=10000010<=time<=100000 )

Output
每组测试数据输出$M$行,第$i$行为第$i$名的名字、解题数量和罚时,中间用空格隔开。

每组数据后空一行。

输入样例

1
3 3
Bob 5 50
Alice 4 46
John 5 48

输出样例

John 5 48
Bob 5 50
Alice 4 46

思考:sort函数排序:默认为升序,从小到大;

        其它排序规则:写cmp函数自定义

        排序范围:对数组A的0~n-1元素进行升序排序,只要写sort(A,A+n)即可; 

#include<bits/stdc++.h>
using	namespace	std;
struct	student{
	char	name[10];
	int		num;
	int		time;
}arr[1000];
bool	cmp(student	x,student	y)
{
	if(x.num==y.num){return	x.time<y.time;};
	return	x.num>y.num;
}
int	main()
{
	int	N;
	cin>>N;
	while(N--)
	{
		int	n;
		int	m;
		cin>>n>>m;
		for(int	i=0;i<n;i++)
		{
			cin>>arr[i].name;
			cin>>arr[i].num;
			cin>>arr[i].time;
		}
		sort(arr,arr+n,cmp);
		for(int	i=0;i<m;i++)
		{
			cout<<arr[i].name<<" "<<arr[i].num<<" "<<arr[i].time<<endl;
		}
	}
}

 

posted @ 2022-02-23 22:23  Gustavo09  阅读(36)  评论(0)    收藏  举报