蓝桥杯软件组b组C/C++比赛经验分享

317317 2022-10-22 09:14:53

蓝桥杯准备

一、参赛经验

我参加的是蓝桥杯软件组b组C/C++组,获得省级一等奖。

该比赛在学校竞赛目录中为C级竞赛。报名费300元。

(本文档仅是我个人的体验哈哈哈哈,每个人还是应该去探索自己的学习方式~)

1.前期准备

如果你的语言基础比较薄弱或者从来没有接触过算法,那么建议先去刷基础题,把自己的语法练到炉火纯青、不会出错,习惯做题模式和提交方式,就开始学正式的算法。

如果说你的语言基础非常好了,那么就可以开始学习一个个攻破算法基础点啦!

需要掌握的基本算法:暴力、枚举、模拟、递归、递推、记忆化搜索、搜索、贪心、回溯、素数、动态规划(去年国赛很多这个)……

如果你是选择C/C++的话,以下知识点得掌握:

  1. STL中容器的运用(可以给你的代码编写带来很大的便利)

  2. C++的输入输出 (输入输出的优化……)

  3. 善用algorithm中的函数(或其他的库),有的函数需要自己写仿函数。

进阶算法:树、二叉树、并查集、图论、数论、高精度、深搜、广搜……

(想冲大奖,咱就是说还是得好好学)

PS:蓝桥杯不要求一道题一定做全对,所以可以骗分,咱就是不会写的话暴力法用起来,能骗一分是一分哈~

个人觉得算法刷题很重要,但是总结也很重要~所以在学习算法点的时候最好做一下总结~

推荐网站:

1.洛谷:首页 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

2.蓝桥杯练习系统:http://lx.lanqiao.cn/

3.PTA:PTA | 程序设计类实验辅助教学平台 (pintia.cn)

4.力扣:题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台

力扣是以函数的形式去写题。

 

2.中后期刷题

前期工作做完后有一定的基础了,可以适当总结一下自己所学的知识,知道自己掌握的情况。然后可以去打一些训练赛,我记得每年蓝桥杯官网都会开放一些训练赛,大家可以去打一下,看看自己到底打的怎么样。然后查漏补缺,补短板。

后期的话其实能力都差不多定型了,这个时期就多去刷一下蓝桥杯往年的真题,看一下题型和题目难度。

不用背函数哈~比赛会有相关文档提供,库里面有哪些函数,都可以看。

在蓝桥杯比赛当天到来之前,每天至少保证刷一题(保持手感)。

 

3.赛场经验

蓝桥杯是早上9点开始比赛,吃好早餐!!!(今年没有发牛奶!不吃早餐得饿到下午QAQ,很饿的情况下脑子真的会变笨),最好提前到场,检查一下电脑的编译环境,然后熟悉比赛的流程和模式。

看到赛题后先把会做的做了(先保证拿到一个基本分数),然后不会的就想办法暴力骗分(这是可以说的)。

时间很充足,不要慌,尽力而为~~~

这个比赛的话拿奖还是比较容易的,好好准备一定可以!

 

4.赛后

可以浅浅总结一下 ,要是你成绩比较好还可以给别人传授传授。

万一你一不小心冲进国赛了,咱们就是说系统的学一下上面的一些进阶算法,能拿个国奖确实还蛮nice的(对于我们这种非ACM常驻人员来说)。

好好把握机会,不要摆烂!

 

二、去年省赛赛题

A 九进制转十进制(填空题,可以手算)

#include <iostream>
#include <cmath>
using namespace std;
​
int main() {
    int n = 2022;
    int ans = 0;
    int i = 0;
    while(n!=0){
        ans += pow(9,i)*(n%10);
        n /= 10;
        i++;
    } 
    cout << ans;    //1478
    return 0;
} 

B 顺子日期(填空题)

这题有点争议(012到底算不算顺子日期)。最后答案都算正确:4 or 14。

这题我直接枚举。

 

C 刷题统计

 

 

#include <iostream>
using namespace std;
typedef long long ll;   //测试用例达到10^18,需要使用long long
​
int main() {
    ll a,b,n;
    cin >> a >> b >> n;
    ll weeks = n / (5*a + 2*b); //先算至少需要多少星期,公式法是最快的O(1)
    ll then = n % (5*a + 2*b);  //计算出剩多少题目是在剩下不到一周的时间内能看完的
    ll ans = 0;     //记录答案
    while(then > 0){        //当书看完后结束循环
        if(ans < 5)
            then -= a;
        else
            then -=b;
        ans++;
    }
    ans += weeks*7;
    cout << ans;
    return 0;
} 

D 修剪灌木

 

这道题 手推个三四道就能找到规律

#include <bits/stdc++.h>    //万能头文件
using namespace std;
​
int main() {
    vector<int> a(10005);
    int n;
    cin >> n;
    if(n==1) {  //特判
        cout<<1;
        return 0;
    }
    int s = (n-1)*2;
    int l = 0,r = n-1;  //双指针控制
    while(l <= r) {
        a[l] = s,a[r] = s;
        l++,r--;
        s -= 2;
    }
    for(int i = 0; i < n; i++)
        cout << a[i] << endl;
    return 0;
}
//比赛的时候我用的模拟,到数大了就错了,还是朴实的方法好用QAQ,省时省力

E X进制减法

 这道题的难点在题目理解,我看了好久才看懂。

#include <bits/stdc++.h>    //万能头文件
using namespace std;
typedef long long ll;
int main() {
    int n,ma,mb;
    cin >> n;
    cin >> ma;
    vector<int> a(100005,0),b(100005,0);
    for(int i = ma-1 ;i >= 0;i--){  //数据从低位到高位存
        cin >> a[i];
    }
    cin >> mb;
    for(int i = mb-1;i >= 0;i--){
        cin >> b[i];
    }
    ll jinzhi = 1;
    ll ans = a[0]-b[0];
    ll mod = 1000000007;
    for(int i = 1;i < ma;i++){
        ll tmp = a[i]-b[i];
        if(tmp > 0){
            jinzhi *= max(2,max(a[i-1]+1,b[i-1]+1));
            ans = (ans + tmp*jinzhi)%mod;
        }
        else{
            jinzhi *= n;
            ans = (ans + tmp*jinzhi)%mod;
        }
    }
    cout << ans;
    return 0;
}

F 统计子矩阵

样例说明

满足条件的子矩阵一共有 19,包含:

大小为 1×1 的有 10 个。 ​ 大小为 1×2 的有 3 个。 ​ 大小为 1×3 的有 2 个。 ​ 大小为 1×4 的有 1 个。 ​ 大小为 2×1 的有 3 个。

评测用例规模与约定

对于 30% 的数据,N , M ≤ 20 N,M≤20N,M≤20; 对于 70% 的数据,N , M ≤ 100 N,M≤100N,M≤100; 对于 100% 的数据,1 ≤ N , M ≤ 500 , 0 ≤ A i , j ≤ 1000 , 1 ≤ K ≤ 250000000 1≤N,M≤500,0≤Ai,j≤1000,1≤K≤2500000001≤N,M≤500,0≤Ai,j≤1000,1≤K≤250000000。

前缀和,我使用的方法偏暴力(我肯定不是满分,但是肯定有分),优化方案当时没想出来。

 

G 积木画

 不会。。。但是据说是洛谷上一道题的改编题。

H 扫雷

 

 

这题就是暴力模拟,设置好标志,最后算总数就OK。

//暴力模拟
#include <bits/stdc++.h>    //万能头文件
using namespace std;
typedef long long ll;
​
struct lei{
    int x,y,r;
    bool boom;
};
​
vector<lei> leo(50004);
vector<lei> pai(50005);
int n,m;
​
void pailei(lei s){
    for(int i = 0;i < n;i++){
        //如果在范围内就爆
        if(pow(s.x-leo[i].x,2)+pow(s.y-leo[i].y,2) <= pow(s.r+leo[i].r,2) && leo[i].boom == 0){
            leo[i].boom = 1;
            pailei(leo[i]);//递归调用
        }
    }
}
​
int main() {
    cin >> n >> m;
    for(int i = 0;i < n;i++){
        cin >> leo[i].x >> leo[i].y >> leo[i].r;
        leo[i].boom = 0;
    }
    for(int i = 0;i < m;i++){
        cin >> pai[i].x >> pai[i].y >> pai[i].r;
        pai[i].boom = 0;
    }
    
    for(int i = 0;i < m;i++)
        pailei(pai[i]);
    
    int ans = 0;
    for(int i =0;i < n;i++) {
        if(leo[i].boom == 1)
            ans++;
    }
    cout <<ans;
    return 0;
}

I 李白打酒加强版

 

//本题为递归、动态规划写法
#include <iostream>
#define MOD 1000000007
using namespace std;
​
int fun(int n,int m,int jiu) {
    if(n < 0 || m < 0)  return 0;   //错误情况 
    if(n == 0 && m == 1 && jiu == 1) return 1;  //处理最后一步 
    else return (fun(n-1,m,jiu*2)+fun(n,m-1,jiu-1)) % MOD;  //递归
} 
​
int main() {
    int n,m;
    cin >> n >> m;
    cout << fun(n,m,2);
    return 0;
}

J 砍竹子(25分)

 没时间写了,这题考场没看,考后也没看哈哈哈哈。

 

最后希望大家拿到自己想要的成绩~

以上如有不对请指出~

...全文
1775 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,040

社区成员

发帖
与我相关
我的任务
社区描述
中南民族大学CSDN高校俱乐部聚焦校内IT技术爱好者,通过构建系统化的内容和运营体系,旨在将中南民族大学CSDN社区变成校内最大的技术交流沟通平台。
经验分享 高校 湖北省·武汉市
社区管理员
  • c_university_1575
  • WhiteGlint666
  • wzh_scuec
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎各位加入中南民族大学&&CSDN高校俱乐部社区(官方QQ群:908527260),成为CSDN高校俱乐部的成员具体步骤(必填),填写如下表单,表单链接如下:
人才储备数据库及线上礼品发放表单邀请人吴钟昊:https://ddz.red/CSDN
CSDN高校俱乐部是给大家提供技术分享交流的平台,会不定期的给大家分享CSDN方面的相关比赛以及活动或实习报名链接,希望大家一起努力加油!共同建设中南民族大学良好的技术知识分享社区。

注意:

1.社区成员不得在社区发布违反社会主义核心价值观的言论。

2.社区成员不得在社区内谈及政治敏感话题。

3.该社区为知识分享的平台,可以相互探讨、交流学习经验,尽量不在社区谈论其他无关话题。

试试用AI创作助手写篇文章吧