PAT 1025 PAT Ranking [排序]

Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneously in several places, and the ranklists will be merged immediately after the test. Now it is your job to write a program to correctly merge all the ranklists and generate the final rank.

Input Specification:

Each input file contains one test case. For each case, the first line contains a positive number N (≤100), the number of test locations. Then N ranklists follow, each starts with a line containing a positive integer K (≤300), the number of testees, and then K lines containing the registration number (a 13-digit number) and the total score of each testee. All the numbers in a line are separated by a space.

Output Specification:

For each test case, first print in one line the total number of testees. Then print the final ranklist in the following format:

registration_number final_rank location_number local_rank

The locations are numbered from 1 to N. The output must be sorted in nondecreasing order of the final ranks. The testees with the same score must have the same rank, and the output must be sorted in nondecreasing order of their registration numbers.

Sample Input:

2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85

Sample Output:

9
1234567890005 1 1 1
1234567890014 1 2 1
1234567890001 3 1 2
1234567890003 3 1 2
1234567890004 5 1 4
1234567890012 5 2 2
1234567890002 7 1 5
1234567890013 8 2 3
1234567890011 9 2 4

我的代码:

分组排序,再整体排序。sort函数可自定义排序的起点和终点。

#include<cstdio>
#include<algorithm>
#include<string.h>

using namespace std;

struct student
{
	char sno[30]; //学号 
	int score; //分数 
	int rankNow,rank; //最终排名和分组排名 
	int location;  //所属小组 
}stu[30005]; // N<=100 K<=300 

bool cmp(student a,student b)
{
	if(a.score!=b.score) return a.score>b.score;
	//字符串不能直接比较,需借助strcmp函数,小于零说明a.sno<b.sno 
	return strcmp(a.sno,b.sno)<0; //分数相同,学号小在前大在后 
}

int main()
{
	int n,i,j,count = 0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		int x;
		scanf("%d",&x);
		for(j=0;j<x;j++)
		{
			scanf("%s%d",&stu[count].sno,&stu[count].score);
			stu[count].location = i+1;
			count++;
		}
		//起首元素和尾元素分别是不同小组的起点和终点 
		sort(stu+count-x,stu+count,cmp);
		//排序完成,数组第一个元素排名为1 
		stu[count-x].rank = 1;
		for(j=count-x+1;j<count;j++)
		{
			//如果分数相等,则排名相等 
			if(stu[j].score==stu[j-1].score) 
				stu[j].rank = stu[j-1].rank;
			//否则等于数组下标+1,-(count-x)还是因为分组的缘故 
			else stu[j].rank = j+1-(count-x);
		}
	}
	//记录完分组排名后进行整体排序 
	sort(stu,stu+count,cmp);
	printf("%d\n",count);
	int rank = 1;
	for(i=0;i<count;i++)
	{
		if(i>0&&stu[i].score==stu[i-1].score) 
			stu[i].rankNow = stu[i-1].rankNow;
		else rank = i+1;
		stu[i].rankNow = rank;
	}
	for(i=0;i<count;i++)
		printf("%s %d %d %d\n",stu[i].sno,stu[i].rankNow,stu[i].location,stu[i].rank);
}

 

基于SSM框架的网红酒店预定系统,是一个集前台用户操作和后台管理员管理于一体的综合性平台。该系统旨在通过信息化手段,提高酒店预订的效率和用户体验。 系统的主要功能模块包括: 1. **用户管理**:允许用户注册、登录,查看个人信息,以及修改个人资料和密码。 2. **客房管理**:管理员可以添加、删除或修改客房信息,包括房型、价格、设施等。 3. **预订管理**:用户可以浏览可用房型,进行预订操作,管理员则可以管理预订订单,包括确认预订、办理入住和退房等。 4. **退订管理**:用户和管理员都可以处理预订的取消,管理员可以审核退订请求。 5. **系统管理**:管理员可以进行系统设置,包括权限管理、日志查看等。 系统的设计考虑了用户体验和管理员的便捷性,通过SSM框架的灵活性和MySQL数据库的稳定性,实现了数据的高效管理和处理。系统的前端界面友好,操作流程简洁,能够满足用户快速预订和查询的需求。同时,系统的后台管理功能强大,能够为管理员提供全面的数据分析和决策支持。 此外,系统还具有高度的安全性和稳定性,通过角色权限控制,确保了数据的安全性和系统的稳定运行。系统的开发和设计,不仅提升了网红酒店的品牌形象,也为用户带来了便捷的预订体验,进一步推动了酒店行业的信息化发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值