思路:把小于等于n的值放到哈希表里面,因为大于n的值根本
没有机会成为不动点,然后如果这个数字在数组里面出现过两次及其以上
证明他可以为两个数组都提供不动点,贡献度就为2,如果出现一次
那么只能为一个数组提供贡献度
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N];
long long ans;
map<int,int>mp;
int main() {
int n;cin>>n;
for(int i=1;i<=n*2;i++){
cin>>a[i];
if(a[i]<=n)//只记录比n小于等于的,否则没机会成为不动点
mp[a[i]]++;
}
for(auto[key,value]:mp){
if(value>=2)ans+=2;
else if(value==1)ans+=1;
}
cout<<ans;
}
// 64 位输出请用 printf("%lld")

京公网安备 11010502036488号