蓝桥杯备赛:Day1-奖学金

1. 题目:P1093 [NOIP2007 普及组 奖学金](https://www.luogu.com.cn/problem/P1093)

📝 我的代码 (AC Version)
c++ 复制代码
#include<bits/stdc++.h>
using namespace std;

// 1. 定义结构体存储多维度数据
struct student {
    int Chinese;
    int Math;
    int English;
    int Sum;
    int Number;
} a[305]; // 数组开大 5 个空间防止越界

// 2. 核心排序逻辑:自定义比较函数
bool comp(student xx, student yy) {
    // 优先级 1:总分大的在前 (降序)
    if (xx.Sum != yy.Sum)
        return xx.Sum > yy.Sum;
    // 优先级 2:总分一样,语文大的在前 (降序)
    if (xx.Chinese != yy.Chinese)
        return xx.Chinese > yy.Chinese;
    // 优先级 3:都一样,编号小的在前 (升序)
    return xx.Number < yy.Number;
}

int n;

int main() {
    // 优化输入输出效率
    ios::sync_with_stdio(0), cin.tie(0);
    
    if (!(cin >> n)) return 0;

    for (int i = 1; i <= n; i++) {
        cin >> a[i].Chinese >> a[i].Math >> a[i].English;
        a[i].Sum = a[i].Chinese + a[i].Math + a[i].English;
        a[i].Number = i;
    }
    
    // 3. 调用 STL sort 函数 (左闭右开区间)
    sort(a + 1, a + n + 1, comp);
    
    // 4. 严格按题目要求格式输出
    for (int i = 1; i <= 5; i++) {
        cout << a[i].Number << " " << a[i].Sum << endl;
    }
    
    return 0;
}

🎯 核心考点说明

1. 结构体 (struct) 的应用
  • 适用场景:当一个物体(如学生)有多个属性(姓名、成绩、学号)且这些属性需要"绑定"在一起排序时,必须使用结构体。
  • 定义技巧struct 类型名 { 成员列表 } 变量名[大小];
2. STL sort 与自定义 comp 函数
  • sort 语法sort(起始地址, 结束地址, 比较规则);
  • 左闭右开 :排 a[1]a[n],参数是 a + 1a + n + 1
  • 比较逻辑comp 返回 true 代表第一个参数应该排在前面。
3. 多级排序逻辑
  • 采用 if-elseif 过滤法:先判断最重要的条件,如果不相等直接返回;如果相等,再进入下一级条件的判断。

⚠️ 注意事项

  • 头文件 :使用 #include <bits/stdc++.h> 可以省去记各种库的麻烦。
  • IO 优化ios::sync_with_stdio(0), cin.tie(0); 是蓝桥杯大题必加项,防止在大规模数据下超时。
  • 数组大小 :题目给出 N ≤ 300 N \le 300 N≤300,数组开 305 是一种防御性编程习惯,避免 i+1 等操作导致越界。

❌ 我犯的错误 (避坑指南)

  1. 语法细节错误
    • for 循环括号内误用逗号 ,,应使用分号 ;
    • cout 流向写反(误写为 >>),正确应为 <<
  2. 输出格式错误 (WA 的主要原因)
    • 多余空格 :在两个输出变量之间加了多个空格。判题机对空格极其敏感,必须严格按照题目要求的"一个空格"输出。
    • 特殊字符:从网页复制粘贴可能带有不可见的特殊编码字符,导致判题失败。建议引号内的内容手动输入。
  3. 逻辑遗漏
    • 忘记了题目要求只输出"前 5 名",最初代码缺少了输出限制循环。
相关推荐
王老师青少年编程2 小时前
信奥赛C++提高组csp-s之搜索进阶(搜索剪枝案例实践1)
c++·csp·高频考点·信奥赛·提高组·搜索剪枝·小木棍
王老师青少年编程5 小时前
信奥赛C++提高组csp-s之搜索进阶(搜索剪枝核心思想 )
c++·dfs·csp·信奥赛·搜索剪枝·搜索优化
一拳一个呆瓜5 小时前
【STL】使用 C++ 标准库标头
c++·stl
王老师青少年编程5 小时前
信奥赛C++提高组csp-s之搜索进阶(搜索剪枝案例实践2)
c++·信奥赛·csp-s·提高组·搜索剪枝·生日蛋糕·最优性剪枝
c++之路6 小时前
C++ 设计模式全总结
java·c++·设计模式
c238566 小时前
c/c++中的多态(上)
开发语言·c++
彷徨而立6 小时前
【C++】介绍 std::ifstream 输入文件流
开发语言·c++
MC皮蛋侠客6 小时前
C++17 多线程系列(十):多线程性能优化——从测量到调优
c++·多线程
程序大视界6 小时前
【C++ 从基础到项目实战】C++(六):拷贝控制——浅拷贝与深拷贝,兼谈智能指针
开发语言·c++·cpp
代码中介商8 小时前
C++四大设计模式:单例、工厂、观察者、策略
java·c++·设计模式