[GESP202603 五级] 找数

对于40%的数据,可以直接双重for循环解决
对于100%的数据,可以排序+双指针解决,也可以输入数组B时直接判断

方案1

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, m, A[100005], B[100005];
    cin >> n >> m;

    for (int i = 0; i < n; i++) cin >> A[i];
    for (int i = 0; i < m; i++) cin >> B[i];

    int ans = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if(A[i] == B[j]) ans++;
        }
    }
    
    cout << ans;
    return 0;
}

方案2

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, m, x;
    cin >> n >> m;

    vector<int> A, B;
    for (int i = 0; i < n; i++) {
        cin >> x;
        A.push_back(x);
    }

    for (int i = 0; i < m; i++) {
        cin >> x;
        B.push_back(x);
    }
    
    sort(A.begin(), A.end());
    sort(B.begin(), B.end());
    
    int p = 0, q = 0, ans = 0;
    while (p < A.size() && q < B.size()) {
        if (A[p] < B[q]) {
            p++; continue;
        }
        if (A[p] > B[q]) {
            q++; continue;
        }
        ans++; p++; q++;
    } 
    
    cout << ans;
    return 0;
}

方案3

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, m, x;
    cin >> n >> m;

    set<int> setA;
    for (int i = 0; i < n; i++) {
        cin >> x;
        setA.insert(x);
    }

    int ans = 0;
    for (int i = 0; i < m; i++) {
        cin >> x;
        if (setA.count(x)) ans++;
    }

    cout << ans;
    return 0;
}