拼题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;
}
要聚精会神,一走神就容易出错误