2021年秋PTA乙 7-5 取帽子 (25 分)

拼题er们觉得戴帽子会令自己看上去很帅,所以他们不管到哪里都会戴着帽子。有一天他们去到一家餐厅,服务员把他们的帽子收集了堆起来保管。当大家要离开的时候,发现帽子被像上图那样摞起来了。于是你的任务就是帮他们排好队,使得每个人都能按顺序顺利取到自己的帽子。

已知每顶帽子的大小都不相同,并且帽子的尺寸跟帽子主人的体重有关 —— 越重的人戴的帽子就越大。

输入格式:

输入第一行给出一个正整数 N (≤104),为拼题er的人数。随后一行给出 N 个不同的帽子尺寸,为不超过 105 的正整数,顺序是从帽子堆的底部向上给出。最后一行给出 N 个不同的体重,顺序对应编号从 1 到 N 的拼题er。体重是不超过 106 的正整数。一行中的数字以空格分隔。

输出格式:

在一行中按照取帽子的顺序输出帽子主人的编号。数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

10
12 19 13 11 15 18 17 14 16 20
67 90 180 98 87 105 76 88 150 124

输出样例:

3 4 8 6 10 2 1 5 9 7

样例说明:

第一顶帽子的尺寸是最大的 20,所以对应第 3 个人的最大体重 180,于是第 3 个人排在最前面。

第二顶帽子的尺寸是第 6 小的 16,对应第 6 小的体重 98,是第 4 个人,于是第 4 个人下一个走。

以此类推。

代码:

#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
vector<int> v1,v2;
map<int,int> mp1,mp2;
int main() {
	int n,x,num=1;
	cin>>n;
	for(int i=0; i<n; i++) {	//帽子:大小为 1~n
		cin>>x;
		v1.push_back(x);
		mp1[x]=1;
	}
	for(auto it=mp1.begin(); it!=mp1.end(); it++) {
		it->second=num;  	//帽子大小排序
		num++;
	}
	for(int i=0; i<n; i++) {	//体重:排序为 1~n
		cin>>x;
		v2.push_back(x);
		mp2[x]=i+1;
	}
	sort(v2.begin(),v2.end());
	for(int i=n-1; i>=0; i--) {
		if(i!=n-1) cout<<" ";
		cout<<mp2[v2[mp1[v1[i]]-1]];
	}
	return 0;
}

都行

#include<bits/stdc++.h>
using namespace std;
map<int,int> hat_mp,weigh_mp;
vector<int> hat_vec;
set<pair<int,int>> weigh;
int main() {
	int n,x,k=0;
	cin>>n;
	for(int i=0; i<n; i++) { // 帽子
		cin>>x;
		hat_vec.insert(hat_vec.begin(),x);
		hat_mp[x]++;
	}
	for(auto it=hat_mp.begin(); it!=hat_mp.end(); it++) { // 帽子 - 大小排序
		hat_mp[it->first]=k;
		k++;
	}
	for(int i=0; i<n; i++) { // 体重
		cin>>x;
		weigh.insert({x,i});
	}
	k=0;
	for(auto it=weigh.begin(); it!=weigh.end(); it++) { // 人的编号->体重排序
		weigh_mp[k]=it->second+1;
		k++;
	}
	for(int i=0; i<n; i++) { // 帽子大小--对应体重的人的编号
		if(i>0) cout<<" ";
		cout<<weigh_mp[hat_mp[hat_vec[i]]];
	}
	return 0;
}

要聚精会神,一走神就容易出错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值