C++ / ACM 自学笔记 · v5.0

(四) 必要条件、充分条件与等价条件

必要条件是“答案成立时一定满足”,但满足它还不一定有答案。充分条件是“满足它就可以保证答案成立”。两者同时成立,才能把原题要求等价替换成这个判断。

例:正整数 a + b 是偶数,说明 a、b 同奇偶;但如果要求 a、b 都是正偶数,只检查总和为偶数还不够,因为 1 + 3 = 4 是反例。

1. 完整示例:分成两个正偶数

题目原文(自拟): 给定整数 weight,判断能否写成两个正偶数之和。只输出 YES 或 NO。输入范围为 1 <= weight <= 1000000000。

分析推导:

  1. 两个偶数之和一定是偶数,所以 weight % 2 == 0 是必要条件。
  2. 两个正偶数各至少为 2,所以 weight >= 4 也是必要条件。
  3. 反过来,如果 weight 为偶数且至少为 4,可以选 2 和 weight - 2;两者都是正偶数,因此两个条件合起来也是充分条件。

所以原要求等价于:

\[ weight\ge4\quad\land\quad weight\bmod2=0 \]

#include <iostream>
using namespace std;

int main() {
    int weight;
    cin >> weight;
    // 两个正偶数的和至少为 4;偶数 weight 可拆成 2 与 weight-2。
    bool possible = weight >= 4 && weight % 2 == 0;
    cout << (possible ? "YES" : "NO") << '\n';
}

输入 2 输出 NO,输入 8 输出 YES,输入 9 输出 NO。

代码解释: 程序只计算一个已经证明充要的条件。时间、额外空间均为 \(O(1)\);不需要枚举两个数。

练习: CF 4A — Watermelon。

查阅笔记正文与全部题解 · Ctrl / ⌘ K