1 条题解

  • 0
    @ 2026-6-19 10:30:51

    📝 题目大意

    NN 个人进行若干次一对一胜负游戏,胜者得 +1+1 分,败者得 1-1 分。已知前 N1N-1 个人的最终得分 A1AN1A_1 \sim A_{N-1},求第 NN 个人的最终得分。无论游戏过程如何,答案唯一确定。

    💡 解题思路

    1. 题目分析:每次游戏都是一场零和博弈——胜者 +1+1、败者 1-1,因此所有人的总得分在游戏过程中始终不变。初始所有人得分均为 00,总得分为 00,所以最终总得分也必定为 00

    2. 算法推导:设 S=i=1N1AiS = \sum_{i=1}^{N-1} A_i,由总分为 00 可得:

      AN+S=0AN=SA_N + S = 0 \quad\Rightarrow\quad A_N = -S

      代码中直接读取前 N1N-1 个数累加到 sum,最后输出 -sum 即可。

    3. 边界与细节

      • 得分可以为负数,sum 使用 int 即可(N100N \le 100Ai100|A_i| \le 100sum10000|sum| \le 10000,远在 int 范围内)。
      • 注意只读取 N1N-1 个数,不要多读。

    ⏱️ 复杂度分析

    • 时间复杂度O(N)O(N),只需遍历一次前 N1N-1 个得分。
    • 空间复杂度O(1)O(1),仅需维护一个累加变量。

    💻 标准代码 (C++)

    #include <iostream>
    using namespace std;
    
    int main() {
        int N;
        cin >> N;
        
        int sum = 0;
        // 读取前 N-1 个人的得分,累加求和
        for (int i = 0; i < N - 1; i++) {
            int A;
            cin >> A;
            sum += A;
        }
        
        // 总分为 0,所以第 N 个人的得分 = -sum
        cout << -sum << endl;
        
        return 0;
    }
    
    • 1

    信息

    ID
    790
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者