贪心即可处理,对于满足x<n的x,只要出现了就是一个不动点,最多作为不动点两次

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int OvO = 0;

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int n;
    cin>>n;
    unordered_map<int,int> mp;

    int ans=0;
    for(int i=1;i<=n*2;i++)
    {  
        int x;
        cin>>x;
        mp[x]++;
        if(mp[x]<=2&&x<=n)
        {
            ans++;
        }
    }

    cout<<ans;
    return OvO;
}
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int OvO = 0;

int cnt[200005];

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int n;
    cin >> n;

    int x, ans = 0;
    for (int i = 1; i <= 2 * n; i++) {
        cin >> x;
        if (x > n)
            continue;
        else {
            if (++cnt[x] <= 2) {
                ans++;
            }
        }
    }
    cout << ans;
    return OvO;
}