[R45A]沙威玛传奇

  • 难度 入门
  • 时限 1s
  • 空限 512m
  • 数学

对于 100%100\% 的数据,1p4p2,p3p11091 \le p_4 \le p_2,p_3 \le p_1 \le 10^9,数据保证答案存在且为非负整数。

思路

这是经典的 容斥原理 问题。

记:

  • 买第一种沙威玛的顾客集合为 AAA=p2|A| = p_2
  • 买第二种沙威玛的顾客集合为 BBB=p3|B| = p_3
  • 两种都买的顾客数 AB=p4|A \cap B| = p_4

至少买一种的顾客数为 AB=A+BAB=p2+p3p4|A \cup B| = |A| + |B| - |A \cap B| = p_2 + p_3 - p_4

总顾客数为 p1p_1,所以什么也没买的顾客数为:

p1(p2+p3p4)=p1p2p3+p4p_1 - (p_2 + p_3 - p_4) = p_1 - p_2 - p_3 + p_4

数据范围到 10910^9,用 Int64 存储即可,题目保证答案非负。

复杂度

  • 时间复杂度:O(1)O(1)
  • 空间复杂度:O(1)O(1)

仓颉实现

import std.env.*
import std.convert.*

main(): Int64 {
    let reader = getStdIn()
    let v = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p: String => Int64.parse(p) })
    let p1 = v[0]
    let p2 = v[1]
    let p3 = v[2]
    let p4 = v[3]
    println(p1 - p2 - p3 + p4)
    return 0
}