题目链接:https://codeforces.com/contest/1382/problem/A
找最小的公共子串(对,就是长度为1)
水题一道,不过看到了一个非常好的O(n)的算法。
利用了统计的思想,如果a数组有x,则A[x]=1,然后读入B数组中的值x的时候的时候判断A[x]是否等于1就行了。
代码:

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

int main() {
    int t; cin >> t;
    while(t--) {
        int n, m; cin >> n >> m;
        vector<bool> A(1024);
        while(n--) {
            int x; cin >> x;
            A[x] = true;
        }
        int a = -1;
        while(m--) {
            int x; cin >> x;
            if(A[x])
                a = x;
        }
        if(a == -1) cout << "NO\n";
        else cout << "YES\n1 " << a << "\n";
    }
}