蓝桥杯备赛

写在前面

报名了蓝桥杯,寒假该是要好好准备了

最近看了一些经验贴,关于蓝桥杯备赛的学习经验一些b站up主讲的还不错,大家感兴趣可以私信我给大家推荐一些

回到正题,关于备赛大致路线,以下算是比较稳妥的方案:

oj平台


oj平台可参考洛谷:先做洛谷官方题单,当所有题刷完理解后再去刷蓝桥杯题
学有余力还可看看acwing、力扣(偏面试)、牛客网之类的,还有计蒜客(可能偏小众)

重点版块

在备赛内容上,以下是两大重点版块:

1. 数据结构的题
八大排序(重点看快速排序 归并排序)手敲一遍代码后学习使用stl 
跟着题单刷题就好 二分法和双指针 递归 暴力 贪心 算法
刷几十道题后过一遍数据结构

2.搜索和动态规划
深度优先搜索 (最重要) 
动态规划  搜索

一点总结

总而言之,蓝桥杯的重中之重不外乎——暴力 搜索 动态规划 递归排序,此外备战蓝桥杯基础知识像 求最大质因数 最小公倍数 质数筛这些基本的还是要会的
关于STL库、sort函数、分治思想这些都或多或少常看提起过,等后期学习后我会逐渐上传相关的学习记录或笔记,有需的uu可以评论自取喔~

多看多做多思考,破解真题始终是最高效的备赛及学习方式,我始终相信有志者事竟成是宇宙法则,备战蓝桥杯的友友们欢迎留言关注,一起成长!


洛谷做题打卡day1

今天主要做了比较基础的题单,把这段时间无暇顾及的基本语法知识点过了一遍,当然是以解题的形式进行的

做到一道有意思的题

洛谷P1042 [NOIP2003 普及组] 乒乓球

题目背景

国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中 1111 分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白 1111 分制和 2121 分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。

题目描述

华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在 1111 分制和 2121 分制下,双方的比赛结果(截至记录末尾)。

比如现在有这么一份记录,(其中 WW 表示华华获得一分,LL 表示华华对手获得一分):

WWWWWWWWWWWWWWWWWWWWWWLWWWWWWWWWWWWWWWWWWWWWWWLW

在 1111 分制下,此时比赛的结果是华华第一局 1111 比 00 获胜,第二局 1111 比 00 获胜,正在进行第三局,当前比分 11 比 11。而在 2121 分制下,此时比赛结果是华华第一局 2121 比 00 获胜,正在进行第二局,比分 22 比 11。如果一局比赛刚开始,则此时比分为 00 比 00。直到分差大于或者等于 22,才一局结束。

你的程序就是要对于一系列比赛信息的输入(WLWL 形式),输出正确的结果。

输入格式

每个输入文件包含若干行字符串,字符串有大写的 WW 、 LL 和 EE 组成。其中 EE 表示比赛信息结束,程序应该忽略 EE 之后的所有内容。

输出格式

输出由两部分组成,每部分有若干行,每一行对应一局比赛的比分(按比赛信息输入顺序)。其中第一部分是 1111 分制下的结果,第二部分是 2121 分制下的结果,两部分之间由一个空行分隔。

样例 #1

样例输入 #1

WWWWWWWWWWWWWWWWWWWW
WWLWE

样例输出 #1

11:0
11:0
1:1

21:0
2:1

提示

每行至多 2525 个字母,最多有 25002500 行。

(注:事实上有一个测试点有 25012501 行数据。)

我的解法

这是道模拟类型的题,参考题解后这是我的代码,重要的地方我加上了注释,其实这道题不算难,在时间和空间量没有限制的情况下主要考思维,自定义关键函数show()后,展开主函数main()内的编写,感觉循环和嵌套算是精髓了。总结来说,思路很重要,多想想,多在草稿纸上画画,用测试数据多调试,debug后成功编译并运行出正确结果真的会感到很幸福!

不管什么都要坚持吧,三天打鱼两天晒网无法形成肌肉记忆和做题思维,该思考的时候一定不要懈怠,今天就说这么多啦,欢迎评论留言,一起成长:)

#include <iostream>
using namespace std;
char s[62600];
int cnt = 0;//cnt为数组长度计数器

void show(int n)//定义函数,该函数返回值为空,函数输入为11或21
{
    int a = 0,b = 0;
    for (int i = 0; i < cnt; i++)//大循环
    {
        if (s[i] == 'W') a++;
        if (s[i] == 'L') b++;

        if ((a >= n || b >= n) && abs(a - b) >= 2)//内层关键输出循环,一旦遇满足则输出
        {
            cout << a << ":" << b << endl;
            a = b = 0;//记得输出一次后置零
        }
    }
 cout << a << ":" << b << endl;//新的一轮刚开始,或上一局没有打完
}
int main()//主函数部分
{
    char ch;
    while (cin >> ch && ch != 'E')//一边输入一边判断是否是结束条件
    {
        if (ch == 'W' || ch == 'L')
        {
            s[cnt++] = ch;//相当于是看是否满足两个循环,在输入判别大循环内嵌判断是否为W或L,将输入依次赋值入数组,s[cnt++]这个很妙
        }
    }
    show(11);
    cout << endl;
    show(21);
    return 0;
}

  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值