[语言月赛 202412] 聪明猪猪大赛 的题解


记住只在没有思路时使用题解,不要从它复制粘贴代码。请尊重题目和题解的作者。
在解题之前提交题解的代码会导致封禁。

作者: admin

概述

本题要求根据给定的两个竞赛的起始年份和每年场次,计算猪历 x 年时两项竞赛共举办了多少场比赛。
核心解法是分别判断 x 是否大于等于各竞赛的起始年份,若成立则累加对应的每年场次数。

分析
核心观察

每项竞赛仅在起始年份及之后的每一年举办,因此某一年是否举办只取决于该年份是否不小于起始年份。

思路

设 ICPC 自 a 年起每年 b 场,CCPC 自 c 年起每年 d 场。
在猪历 x 年,ICPC 的举办场数为:

\displaystyle  \text{icpc} = \begin{cases} b, & x \ge a \\ 0, & x < a \end{cases}

CCPC 的举办场数为:

\displaystyle  \text{ccpc} = \begin{cases} d, & x \ge c \\ 0, & x < c \end{cases}

总场数为二者之和。本题数据范围最大 10^9,累加可能达到 2 \times 10^9,需使用 64 位整数存储。

具体示例

样例 1:a=1, b=2, c=3, d=4, x=5。因为 5 \ge 1 且 5 \ge 3,所以答案 2+4=6。
样例 2:a=5, b=1, c=2, d=1, x=4。因为 4 \ge 5 不成立,ICPC 为 0;4 \ge 2 成立,CCPC 为 1,答案 1。

算法步骤
  1. 读入五个整数 a, b, c, d, x。
  2. 将答案 ans 初始化为 0。
  3. 若 x \ge a,则将 ans 增加 b。
  4. 若 x \ge c,则将 ans 增加 d。
  5. 输出 ans。
复杂度分析
  • 时间复杂度:O(1)
  • 空间复杂度:O(1)
实现注意事项
  • 所有变量使用 64 位整数(C++ 中 long long,Python 中 int 自动支持),避免溢出。
  • 输入格式为每行一个整数,按顺序读取即可。
  • 判断条件为 >=,包含起始年份本身。
源代码
#include <bits/stdc++.h>
using namespace std;

int main() {
    long long a, b, c, d, x;
    cin >> a >> b >> c >> d >> x;
    long long ans = 0;
    if (x >= a) ans += b;
    if (x >= c) ans += d;
    cout << ans << '\n';
    return 0;
}
a = int(input())
b = int(input())
c = int(input())
d = int(input())
x = int(input())

ans = 0
if x >= a:
    ans += b
if x >= c:
    ans += d
print(ans)

评论

目前没有评论。