2 条题解

  • 0
    @ 2025-7-4 15:37:09
    #include<bits/stdc++.h>  // 包含所有常用的库
    using namespace std;    // 使用标准命名空间
    
    int a[100005];         // 定义一个可以存放很多数字的大数组
    
    int main(){
        int n, x;          // n: 数字个数, x: 目标和
        int *b;             // 指针b,用来指向找到的数字位置
        
        cin >> n;           // 输入数字的个数
        for(int i = 0; i < n; i++)
            cin >> a[i];    // 循环输入每个数字
        
        cin >> x;           // 输入我们要找的和x
        
        sort(a, a + n);    // 把数组里的数字从小到大排序(像排队一样)
        
        // 遍历数组中的每个数字
        for(int i = 0; i < n; i++){
            // 用魔法工具(lower_bound)在数组中寻找与a[i]配对的数字
            // 这个工具会帮我们找到第一个 >= (x - a[i]) 的数字位置
            b = lower_bound(a, a + n, x - a[i]);
            
            // 特殊情况:如果找到的位置刚好是自己
            if(b - a == i) {
                // 检查下一个数字是否和自己不同(防止重复使用同一个位置)
                if(*(b+1) != *b) continue; // 跳过自己找下一个
            }
            
            // 如果找到的数字正好等于我们需要的配对值
            if(*b == x - a[i]) {
                // 打印这对数字
                cout << a[i] << " " << *b;
                return 0;   // 结束程序
            }
        }
        
        // 如果遍历完都没找到
        cout << "No";       // 输出"No"
        return 0;
    }
    
    • 0
      @ 2025-7-4 14:48:58

      想得美 ^____^

      • @ 2025-7-4 14:51:53

        你!!!!!!!!!!!!!!!!!

      • @ 2025-7-4 14:52:02

        你!!!!!!!!!!!!!!!!!

    • 1

    信息

    ID
    258
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    9
    已通过
    6
    上传者