AtCoder Beginner Contest 243 B - Hit and Blow
問題の要約
長さNの整数列A=(A1,A2,...,AN),B=(B1,B2,...,BN)が与えられる。
次の2つを出力せよ。
1.AにもBにも含まれ、その位置も一致している整数の個数。
2.AにもBにも含まれるが、その位置は異なる整数の個数。
制約
1<=N<=1000
1<=Ai,Bi<=10^9
Aiはすべて異なる
Biはすべて異なる。
入力
N
A1 A2 ... AN
B1 B2 ... BN
考え方
1,値に対して位置を返してくれるデータ構造を使う。今回はmapを使う。
2,整数列Aの数Aiをキーをして位置i+1を値として使ってmapを作る。
3,条件1の答えをans1、条件2の答えをans2として用意する。
4,整数列BのBiをキーにして、作ったmapに検索をかけ、条件に合った方の答えを増やしていく。
実際のプログラム
#include<iostream>
#include<map>
using namespace std;
int main(){
int N;
cin >> N;
map<long long,int> mp;
for(int i = 0; i < N; i++){
long long Ai;
cin >> Ai;
mp[Ai] = i+1;
}
int ans1 = 0;
int ans2 = 0;
for(int i = 0; i < N; i++){
long long Bi;
cin >> Bi;
if(mp[Bi] != 0){
if(mp[Bi] == i+1){
ans1++;
}else{
ans2++;
}
}
}
cout << ans1 << endl;
cout << ans2 << endl;
return 0;
}