1 条题解

  • 1
    @ 2025-9-13 13:17:40

    编译错误

    编译错误 - 帮助 - UIT OnlineJudge

    C

    说明

    本题要求计算开启n个神秘宝箱后能获得的最少金币数和最大金币数。解题思路如下:

    1. 最少金币数:每个宝箱都取最少金币数l_i,总和即为所有l_i的累加和
    2. 最大金币数:每个宝箱都取最大金币数r_i,总和即为所有r_i的累加和

    由于n最大为100000,每个数值最大为10^9,总和可能达到10^14(100000×10^9),超过了C语言中int类型的表示范围(int最大约2×10^9),因此需要使用long long类型(64位整数,可表示范围约-9×10^18到9×10^18)来存储总和。整个过程需要遍历n个宝箱,时间复杂度为O(n)(随n线性增长)。

    代码

    #include <stdio.h>
    
    int main() {
        int n;
        scanf("%d", &n);
        
        // 使用long long类型存储总和,避免数值溢出
        long long sum_min = 0, sum_max = 0;
        for (int i = 0; i < n; i++) {
            long long l, r;
            // %lld是long long类型的格式控制符
            scanf("%lld %lld", &l, &r);
            sum_min += l;
            sum_max += r;
        }
        
        // 输出long long类型时同样使用%lld
        printf("%lld %lld\n", sum_min, sum_max);
        return 0;
    }
    

    C语言拓展知识

    推荐搜索:C语言整数类型范围(int、long long的区别)、scanf/printf对long long的格式控制(%lld的用法)、整数溢出的危害及避免方法。

    C++

    说明

    本题与C语言解法思路完全一致:累加所有宝箱的最小金币数l_i得到最少总金币,累加所有最大金币数r_i得到最大总金币。C++实现时,需注意使用long long类型存储总和以避免溢出,同时可通过输入输出优化提升大数据量下的处理速度。

    万能头文件

    #include<bits/stdc++.h> 是C++非标准头文件(竞赛常用),包含所有标准库(如输入输出库、容器库、算法库),无需手动逐个包含,适合快速编码。

    新知识

    1. 64位整数类型:

      • 术语:long long
      • 解释:与C语言的long long一致,是64位整数类型,用于存储超出int范围的大整数(如本题中10^14级别的总和)。
      • 对比:C和C++都支持long long,但C++中cout输出long long时无需格式控制符,而C语言的printf需要%lld。
    2. 输入输出优化:

      • 术语:ios::sync_with_stdio(false); cin.tie(0);
      • 解释:关闭cin与stdio的同步(默认开启以保证兼容性),并解除cin与cout的绑定,可显著提高cin/cout的输入输出速度,适合处理n=1e5级别的大量数据。
      • 对比:C语言的scanf/printf本身速度较快,无需额外优化;C++的cin/cout默认速度较慢,加上此优化后可接近scanf/printf的效率。

    AC

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        // 输入输出优化:加快cin/cout处理大量数据的速度
        ios::sync_with_stdio(false);
        cin.tie(0);
        
        int n;
        cin >> n;
        
        // long long类型存储总和,避免溢出
        long long sum_min = 0, sum_max = 0;
        for (int i = 0; i < n; i++) {
            long long l, r;
            cin >> l >> r;
            sum_min += l;
            sum_max += r;
        }
        
        cout << sum_min << " " << sum_max << endl;
        return 0;
    }
    

    C++拓展知识

    推荐搜索:C++中long long与int的性能对比、cin/cout优化的原理(ios::sync_with_stdio的作用)、C++输入输出流的缓冲区机制。

    • 1

    信息

    ID
    487
    时间
    3000ms
    内存
    256MiB
    难度
    2
    标签
    (无)
    递交数
    134
    已通过
    35
    上传者