C++ 模拟

mi = min(a,b), ma = max(a,b)

使用flag记录是否存在已经做好的蛋糕大于最大值或小于最小值

使用 flag_min记录缺少的 最小值的数量, 初始值为1

使用 flag_max记录缺少的最大值的数量, 初始值为1

最后判断 flag是否为true并且剩余的蛋糕数量(n-m)是否满足所需的数量(flag_min + flag_max)。

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

int main() {
    int n, m, a, b;
    while (cin >> n >> m >> a >> b) {
        int mi = min(a, b), ma = max(a, b);
        int remain = n - m, need_min = 1, need_max = 1, flag = 1, x;
        while (m--) {
            scanf("%d", &x);
            if (x == mi) need_min = 0;
            else if (x == ma) need_max = 0;
            else if (x < mi || x > ma) flag = 0;
        }
        if (flag && remain >= need_min + need_max) puts("YES");
        else puts("NO");
    }
    return 0;
}