参赛选手身高问题II


时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交:485            测试通过:51

描述

2013“华为杯”南京邮电大学大学生团体歌唱大赛即将在南邮举行,本次大赛由南京邮电大学大学生就业与创业指导中心主办,南京邮电大学华为俱乐部(Huawei Club)和南京邮电大学学生职业发展协会(SCDA)联合承办,华为技术有限公司提供赞助。

为了展示南邮学子风采,大赛组委会规定:每个参赛团体由3名同一年级在校本科生或硕士研究生选手组成,3名选手按照身高等差排列,例如参赛团体中3个选手身高依次为160厘米、170厘米、180厘米,则该团体报名成功。

在此次大赛中,每一个参赛团队根据报名先后次序、3个选手身高排列生成一个队名,具体命名方式如下:每一个参赛团队3个选手的身高按照从矮到高的次序组成一个排列,所有这些排列按字典序进行排序,这时排序相同时,再按照报名先后次序确定顺序,对应的参赛团队获得一个顺序编号;“2013hwt”和顺序编号组合即为参赛团队的队名。

举一个例子,有以下5个参赛团队报名信息,相应的顺序编号和队名如下:

报名次序

选手身高信息

顺序编号

队名

1

180 160 170

2

2013hwt2

2

160 180 170

3

2013hwt3

3

170 170 170

4

2013hwt4

4

190 170 180

5

2013hwt5

5

140 150 160

1

2013hwt1

    现在的问题是:给定每一个参赛团队的报名次序、3个选手任意次序的身高值,请你为每一个参赛团队生成队名。

输入

输入包括N+1行,首先给出参赛团队数N,接着根据报名先后次序给出N行,每1行依次给出某个参赛团队报名次序C、3个选手任意次序的身高值,1≤N≤30000,1≤C≤N,身高值不低于140厘米、不高于230厘米。

输出

按照报名先后次序输出N行,每1行依次给出相应参赛团队的报名次序和生成的队名。

样例输入

5
1 180 160 170
2 160 180 170
3 170 170 170
4 190 170 180
5 140 150 160

样例输出

1 2013hwt2
2 2013hwt3
3 2013hwt4
4 2013hwt5
5 2013hwt1

提示

本题纯属虚构,题目中输入数据和输出数据在一行中均以空格分隔。

对给定的字符集或数集中的字符或数规定一个先后关系,在此基础上规定两个排列的先后是从左到右逐个比较对应字符的先后,或者根据给定的数集中的数值大小关系,规定两个排列的先后是从左到右逐个比较对应的数值的大小,即依照字典序给出排列次序。

以下是我的代码,仅供参考:

#include <iostream>
#include <string>
#include <algorithm>
#include <malloc.h>
using namespace std;

typedef struct team{
	int serial;
	int height[3];
	int title;
} TEAM;

int compare1(TEAM a,TEAM b){
	int i;
	for(i = 0;i<3;i++){
		if(a.height[i]<b.height[i]) return 1;
		else if(a.height[i]>b.height[i]) return 0;
		else continue;
	}
	return (a.serial<b.serial)?1:0;
}

int compare2(TEAM a,TEAM b){
	return a.serial<b.serial;
}

void swap(int *a, int *b){
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {  
	int i,n,h[3];
	cin>>n;
	TEAM *teams = (TEAM *)malloc(sizeof(TEAM)*n);
	for(i = 1;i<=n;i++){
		int j;
		cin>>j>>h[0]>>h[1]>>h[2];
		if(h[0] > h[1]) swap(&h[0], &h[1]);
        if(h[1] > h[2]) swap(&h[1], &h[2]);
        if(h[0] > h[1]) swap(&h[0], &h[1]);
		teams[i-1].serial = j;
		teams[i-1].height[0] = h[0];
		teams[i-1].height[1] = h[1];
		teams[i-1].height[2] = h[2];
		teams[i-1].title = j;
	}
	
	stable_sort(teams,teams+n,compare1);
	for(i = 0;i<n;i++){
		teams[i].title = i+1;
	}
	stable_sort(teams,teams+n,compare2);
	for(i=0;i<n;i++)
		cout<<teams[i].serial<<" 2013hwt"<<teams[i].title<<endl;
	free(teams);
	return 0;
}  


### 一、项目背景与目标 - 使用Python爬取数据。 - 目标网站:百度百科《乘风破浪的姐姐》页面。数据获取:https://baike.baidu.com/item/乘风破浪的姐姐 - 目的:获取参赛嘉宾信息,并进行可视化分析。 ### 二、爬虫流程与工具 1. **发送请求**: - 使用`requests`模块发送HTTP GET请求。 - 设置请求头中的`User-Agent`以模拟浏览器。 2. **获取响应数据**: - 服务器返回HTML文档。 3. **解析并提取数据**: - 使用`BeautifulSoup`库解析HTML。 - 查找并提取所需数据(如选手姓名、链接等)。 4. **保存数据**: - 将提取的数据保存为JSON文件。 ### 三、数据爬取与解析 1. **爬取嘉宾信息**: - 从百度百科《乘风破浪的姐姐》页面爬取嘉宾信息表格。 - 查找包含“按姓氏首字母排序”的表格并返回其HTML。 2. **解析嘉宾信息**: - 解析嘉宾信息表格,提取选手姓名和个人百度百科页面链接。 - 将提取的信息保存为`stars.json`文件。 3. **爬取选手详细信息**: - 遍历`stars.json`文件中的选手链接。 - 从每个选手的百度百科页面爬取详细信息(如民族、星座、血型、身高、体重、出生日期等)。 - 下载选手图片并保存在以选手姓名命名的文件夹中。 - 将选手的详细信息保存为`stars_info.json`文件。 ### 四、数据可视化分析 1. **绘制选手年龄分布柱状图**: - 从`stars_info.json`文件中读取选手的出生日期。 - 计算选手年龄并统计各年龄段的选手数量。 - 使用`matplotlib`库绘制柱状图。 2. **绘制选手体重饼状图**: - 从`stars_info.json`文件中读取选手的体重信息。 - 根据体重将选手划分为不同的区间。 - 统计各区间内的选手数量并使用`matplotlib`库绘制饼状图。 3. **绘制选手身高饼状图**: - 从`stars_info.json`文件中读取选手的身高信息。 - 根据身高将选手划分为不同的区间。 - 统计各区间内的选手数量并使用`matplotlib`库绘制饼状图。 ### 五、其他注意事项 - 在进行可视化分析前,需要下载并配置中文字体以确保图表中的中文能够正确显示。 - 文档中提供了两种绘制图表的方法:一种是直接使用`matplotlib`库;另一种是先将数据读入`pandas` DataFrame,然后再使用`matplotlib`库进行绘制。
最新发布
03-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值