PIPIOJ 1056: PIPI的目标Ⅱ
题目描述
PIPI又收到了一个礼物——还是个长度为N的数组。PIPI想从中选出两个数字,使它们的和为T,并输出两个数字的下标。
你能帮帮PIPI吗?
若有多组答案,输出字典序最小的一组。
例如A={1,2,3,4},T=5,则{0,3},{1,2}都满足,输出{0,3}。
题目保证每组数据都至少有一组答案。
题解
代码如下(示例):
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n,t,a[N];
unordered_map<int,int> mp;
int main(){
while(~scanf("%d%d",&n,&t)){
for(int i=0; i<n; i++){
scanf("%d",&a[i]);
if(!mp.count(a[i]))mp[a[i]] = i;
}
for(int i=0; i<n; i++){
if(mp[t-a[i]]){ // mp[t-a[i]]!= i or mp[t-a[i]]==i
if(t-a[i]==a[i]){
for(int j=i+1; j<n; j++){
if(a[j]==a[i]){
printf("%d %d\n",i,j);
break;
}
}
break;
}else{
printf("%d %d\n",i,mp[t-a[i]]);
break;
}
}
}
mp.clear();
}
}