算法竞赛总结

2025.03.30 CCF CSP 认证考试

优点

  • 应该具有能做出前四道题的自信
    • 前四道题每道题都应拿分
    • 第一题必拿分
    • 第二题拿70分以上
    • 第三题、第四题拿部分分

反思

  • 对于输入输出还需要更加深入理解
    • cin / cout
    • scanf / printf
    • gets / puts
    • getchar / putchar
  • 对于动态规划的问题还要深入理解
    • 不只是01背包,还有完全背包,多重背包问题
    • 模拟题还需要加强理解,不要着急做题,最好把整个解题过程写下来再开始敲代码

输入/输出

  • 在第3道模拟题中,我遇到了一个问题,就是输入的问题
  • 这道题的输入数据是这样的:1 a $a $b,其中:
    • 1:表示变量类型
    • a:表示变量名
    • $a $b:表示变量存储的内容
  • 这是,我对于如何将$a $b存到一个字符串中感到很疑惑,我采用了如下方式读取输入数据
int type;
string var_name, var_content;
cin >> type >> var_name;
gets()
  • 但是上面的代码在ccf csp的编译器上报了编译错误,我记得当时的bug是:
error: ‘gets’ was not declared in this scope
  • 很明显,这个函数不存在;其实gets()c中的函数,在一些版本较新的编译器已经被删除掉了,例如gcc 17

  • 正确做法:全程使用c++的输入函数

#include <bits/stdc++.h>
using namespace std;
int main(){
    string line;
    getline(cin, line);
    // 这个函数是读取整行内容
    // getline(cin, line, ',');
    // 这个函数是读取到第一个逗号
    stringstream ss(line);
    string type_str, var_name, var_content;
    ss >> type_str >> var_name;
    getline(ss, var_content);
    if(!var_content.empty() && var_content[0] == ' ')
        var_content = var_content.substr(1);

    cout << "类型: " << type_str << endl;
    cout << "变量名: " << var_name << endl;
    cout << "变量值: " << var_content << endl;

    return 0;
}

  • 正确做法:
#include <bits/stdc++.h>
using namespace std;

int main(){
    string var_type, var_name, var_content;
    string s;
    cin >> var_type >> var_name;

    while(cin.peek() == ' ')
        cin.get();

    while(cin.peek() != '\n' && cin >> s){
        if(!var_content.empty())
            var_content += ' ';
        var_content += s;
    }

    cin.ignore();

    cout << "类型: " << var_type << endl;
    cout << "变量名: " << var_name << endl;
    cout << "内容: " << var_content << endl;

    return 0;
}
  • 讲解:
    • cin.peek():查看下一个字符但是不取出
    • cin.ignore():默认忽略一个字符,用于清理行尾换行符,防止干扰下一次读取
    • cin >> s:用作循环判断条件时,可以判断是否输入成功
while(cin >> s)
    // 循环,如果成功读取到一个字符(遇到空格或者换行符就结束),就继续循环

2025.04.12 蓝桥杯C/C++ A组

优点

  • 已经可以解决多道问题

反思

  • 应该熟练DFS/BFS的板子
  • 对于一些模拟题,不用只局限于样例,还应该自己测试一些样例



Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • Google Gemini updates: Flash 1.5, Gemma 2 and Project Astra
  • Displaying External Posts on Your al-folio Blog
  • 强化学习导论
  • 企业项目实训
  • 面试总结