一本地图有N个城市,编号从1到N。每个城市有个代号,索隆每到一个城市只能知道该城市的代号而不知道该城市的编号,现有一份编号与代号对应的清单,请帮他找到所在城市的编号。
输入格式: 第一行为两个正整数N,M。表示N个城市,M个询问。接下来N行,每行一个整数ai,第i行表示编号i的城市的代号为ai。接下来M行,每行一个整数b,表示当前所在城市的代号。
输出格式:对于每个询问,输出一行一个整数。
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m;cin>>n>>m;int a[1000006];
for(int i=1;i<=n;i++){//i表示编号,从1开始
int ai;cin>>ai;a[ai%1000006]=i;
}
for(int i=0;i<m;i++){//按行输出
int b;cin>>b;cout<<a[b%1000006]<<endl;
}return 0;
}
第二种方法:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n,m;cin>>n>>m;
vector<pair<int,int>> city(n);
for(int i=0;i<n;i++){
int ai;cin>>ai;
city[i]={ai,i+1};//{代号,编号}
}
sort(city.begin(),city.end());//默认对代号排序
for(int i=0;i<m;i++){
int b;cin>>b;//auto自动推断变量类型;lower_bound二分法查找
auto it=lower_bound(city.begin(),city.end(),make_pair(b,0));
cout<<it->second<<endl;//构造pair对象用于查找,0无实际意义
}return 0;}//second表示编号
输入示例
6 3
4
5
7
10
8
2
4
5
8
输出示例
1
2
5

被折叠的 条评论
为什么被折叠?



