写在前面
报名了蓝桥杯,寒假该是要好好准备了
最近看了一些经验贴,关于蓝桥杯备赛的学习经验一些b站up主讲的还不错,大家感兴趣可以私信我给大家推荐一些
回到正题,关于备赛大致路线,以下算是比较稳妥的方案:
oj平台可参考洛谷:先做洛谷官方题单,当所有题刷完理解后再去刷蓝桥杯题
学有余力还可看看acwing、力扣(偏面试)、牛客网之类的,还有计蒜客(可能偏小众)
在备赛内容上,以下是两大重点版块:
1. 数据结构的题
八大排序(重点看快速排序 归并排序)手敲一遍代码后学习使用stl?
跟着题单刷题就好 二分法和双指针 递归 暴力 贪心 算法
刷几十道题后过一遍数据结构
2.搜索和动态规划
深度优先搜索 (最重要)?
动态规划 ?搜索
总而言之,蓝桥杯的重中之重不外乎——暴力 搜索 动态规划 递归排序,此外备战蓝桥杯基础知识像?求最大质因数 最小公倍数 质数筛这些基本的还是要会的
关于STL库、sort函数、分治思想这些都或多或少常看提起过,等后期学习后我会逐渐上传相关的学习记录或笔记,有需的uu可以评论自取喔~
多看多做多思考,破解真题始终是最高效的备赛及学习方式,我始终相信有志者事竟成是宇宙法则,备战蓝桥杯的友友们欢迎留言关注,一起成长!
洛谷做题打卡day1
今天主要做了比较基础的题单,把这段时间无暇顾及的基本语法知识点过了一遍,当然是以解题的形式进行的
做到一道有意思的题
国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中?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?分制下的结果,两部分之间由一个空行分隔。
WWWWWWWWWWWWWWWWWWWW
WWLWE
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;
}