蓝桥杯刷题冲刺 | 倒计时1天

作者:指针不指南吗
专栏:蓝桥杯倒计时冲刺

蓝桥杯加油,大家一定可以

文章目录

我是菜菜,最近容易我犯的错误总结 + 一些tips
各位蓝桥杯加油加油

    • 当输入输出数据不超过 1e6 时,scanf printfcin cout 是没有差距的;
    • 超过这个数据范围时,就是用 scanf printf
  1. 多次调式,自己手写几组数据,用代码测试一下

    输入格式,和输出格式,逐一对照题目

    用 int 还是 char 读入多组输出结果 是用空格开始换行 ,大小写是否正确

    • dev 先开 10个 窗口,把框架打上去,做好准备,可以先 默写一个板子,试试手感
    • 带不同颜色的笔,可能很有用
  2. 自己设置样例,把所有的临界情况,都写出来;尽可能多的,想想出题人出怎么卡你

    • 截断的话,强制转化,double 类型
    • 加 0.5 :3.5和3.6、3.4 +0.5 再强制转化,成int 截断
    • 四舍五看单双 x*100%10判断它
    • printf 直接包含 四舍五入
  3. 注意由负数和0,1,2等特殊情况,把这几个值作为样例,带入到里面去调试

  4. 并查集的板子,太细了,仔细看看

  5. 考虑边界条件,是否可以取到,是否需要多取一个

  6. 取最中间两个数的,表示方法记住:[(n+1)/2] [(n+2)/2]

    认真审题!!注意到每一句话,太重要了

10.数据类型错了 应该是 double , 我一直写的 int , 最后才发现

  1. 一定要确保数据类型使用正确
  2. 巧用 word 和 excel ,来解答
  3. 数据范围,一定要明确,输入范围,不代表结果的范围,大坑
  4. 当 运算结果不正确的时候 Debug , 可以用一个比较小的数,从头到尾走一遍,在纸上写一写

走的时候,不要看 大致思路 , 出错往往是那些不起眼的小地方 ,每一个关键字 ,都 走一遍

  1. 先把逻辑再纸上写一遍,再开始写代码

  2. 写代码的时候,逻辑很乱,条理不清晰,提前没有写注释,后面修改的时候,就很懵

    动手模拟一下,往往会事半功倍

    此外,数据开的范围要足够大

  3. 1B(Byte 字节)=8bit,
    1KB (Kilobyte 千字节)=1024B,
    1MB (Megabyte 兆字节 简称“兆”)=1024KB,
    1GB (Gigabyte 吉字节 又称“千兆”)=1024MB,
    1TB (Trillionbyte 万亿字节 太字节)=1024GB,其中1024=2^10 ( 2 的10次方)

  4. sum=-1e18; //让 sum 尽可能的小,因为输入的数中含有负数

  5. 读题,理解他深层次的要求,明确要求什么

    属于一个规律题,编号可以 推出来

  6. 发散性思维,在做蓝桥杯的时候,遇到这种 数 的题,先静下心来,找找规律

  7. 定义变量之前,先想清楚,它的数据类型和范围

  8. 有向无环图才会有拓扑序列,所以有向无环图又称为拓扑图,无向图没有,环也没有

    入度:有几条边进入某个顶点;出度:有几条边从某个顶点出去

    拓扑练习

  9. 注意最后的输出格式,别最后好不容易算对了,结果格式错了,太冤了

  10. 原来还可以使用结构体,确实简单了不少

    sort函数的重载

  11. ^ 异或 两个位相同为0,相异为1。
    ~ 取反
  12. img

  13. 数字可以使用 string 字符串,来储存比较各个数位

  14. 双向和自环,注意

  15. while(a[m]==0)  //去掉前导0,优化
    {
    	m++;
    }
    
  16. 对于题中给的数据范围,要分情况分析,尤其是含有负数、0、正数的情况

  17. 遇到捆绑问题+排序问题的时候,使用结构体处理数据

    两组数据的时候,可以使用双重数组,里面有排序的话 ,拒绝数组

  18. 还有就是数据很大,一律不用使用 int ,省的后期还得改

  19. 0x7fffffffffffffffL; // long long的最大

  20. dfs 递归回溯

  21. bfs 不断扩展 直到找到结果

  22. 全排列蓝桥杯刷题冲刺 | 倒计时1天_第1张图片

  23. 坐标表示,(1,1)在左下角

    for(int i=n; i>=1; i--)
    {
        for(int j=1; j<=m; j++)
        {
            s[i][j]=getchar();
            if (s[i][j]=='.')
                cnt++;//统计有多少个空
        }
        getchar();
    }
    
  24. dist、h的初始化

  25. vector 二维数组:

    • vector q[m] 表示可以往 q[1],q[2] 里面放一个数组,

    q[2][3] 表示 q[2]这个数组的 第 3个元素,根据上面题中理解更透彻

    而且还可以 使用 q[2].size() 就很方便

  26. 注意谁除谁,觉得结果很离谱,就转化一下思维,从另一个角度来理解题

  27. 动手在纸上模拟,思路就会很清晰,千万别硬想

  28. 仔细阅读输出提示,-1 的情况

  29. 在浮点数精度问题上,和在某范围内查找某个数的时候特别是大范围就使用二分算法

  30. 1.reverse(str.begin(),str.end()) 反转字符串
     	 
    2.reverse(vector.begin(),vector.end()) 反转向量
     
    3.reverse(a,a+strlen(a)) 反转数组
    
  31. 找规律,发散思维,很有可能有递归,看看前后几个数之间的关系

    递归函数,可能会超时,考试的时候,就直接使用 数组来代替函数

  32. 使用 switch 执行不同的函数

47.dfs 回溯+深搜+恢复现场
考试的时候,不会的题,一定要把样例写上去,骗分!

  1. s=to_string(n):数字转为字符串
  2. s=substr(start,length):复制子字符串,从指定位置开始并具有指定的长度,substr(start , length)
  3. n=stoi(s):字符串转为数字,stoi(字符串 , 起始位置 , n进制)
  • stoi(字符串,起始位置,n2~32进制),将n进制的字符串转化为十进制
  1. 截取全部字串

    for (int i = 0; i < str.size(); i ++) 
    for (int j = 1; j <= str.size() - i; j ++)  //注意这里的细节  1、!、= -i
     string s = str.substr(i , j);  
    
  2. 判断素数

    bool prime_number(int num)  //判断素数 方法一
    {
    	if (num <= 3)  return num > 1;
    	if (num % 2 == 0)  return false;
    	if (num %6 != 1 && num % 6 != 5)  return false;
    	for (int i = 3; i < sqrt(num); i += 2)
    		if (num % i == 0)  return false;
    	return true;
    }
    
  3. 输出技巧:使用 flag 标记第一个数,符号带在数的前面(说的有点抽象,结合上面这个题理解)

使用 多个 if else 来判断条件,是否输出相对应的符号

  1. unsigned int 0~4294967295 (10位数,4e9)
    int -2147483648~2147483647 (10位数,2e9 2^{31}-1)
    long long -9223372036854775808~9223372036854775807 (19位数, 9e18 ) 2^{63}-1
    unsigned long long 0~18446744073709551615 (20位数,1e19) 2^{64} - 1
  2. m是 1 0 5 10^5 105 级别的话就是稠密图,m是n级别的就是稀疏图

    ps数组元素个数不能太多,一开始用的 1e5 ,编译过不去

  3. 进制转化问题:

    1. 填空题直接借助于计算器
    2. 编程,注意累乘的进位的顺序,别整反了;使用字符串来储存数字
    3. '0’是字符0的意思,他所对应的ASCII码为48;而0是数字0,ASCII中的0
  4. ASCII 转换公式

    0-9 A-Z a-z
    ASCII码值 48-57 65-90 97-122
    • ASCII码值大小:数字<大写字母<小写字母
    • 以上三种ASCII码因为都是连续的,所以都可以加相应的数从而得到之后的ASCII码值
    • 小写转大写:小写字母 - ‘a’ + ‘A’
    • 大写转小写:大写字母 - ‘A’ + ‘a’
    • 小写转数字:小写字母 - ‘a’ + ‘0’
    1. 原值减去 原对应类型的第一个值 (置零);
    2. 然后加上 所求类型的第一个值的ASCII
  5. 从13!开始就开始爆int;

    从21!开始就开始爆 long long;

    高精度乘法,把小的int存

  6. long double 输出用%Lf

  7. 绝对值 整数时,使用 abs;浮点数,使用 fabs

  8. 使用万能头的话,不要使用 y1

  9. 三角形面积

    //海伦公式 long double p=(a+b+c)/2;
    S=sqrt(p*(p-a)*(p-b)*(p-c));   //背过printf("%.2Lf\n",S);  //这里,输出 Lf
    
S=fabs(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2)*1.0/2;  //这里,abs的使用,面积没有负的,坐标法
  1. 函数来改变某个变量,记得使用 引用

  2. 使用邻接表的时候 h 初始化 + add ,初始化别丢

  3. 什么问题可以运用二分搜索算法技巧?

    1. 首先,你要从题目中抽象出一个自变量 x,一个关于 x 的函数 f(x),以及一个目标值 target

    2. 同时,x, f(x), target 还要满足以下条件:

      f(x) 必须是在 x 上的单调函数(单调增单调减都可以)

      题目是让你计算满足约束条件 f(x) == target 时的x的值。

  4. 利用 map 键值对来存 每一数在数组中出现的次数,然后就可以直接使用了

    开 long long 不要犹豫

  5.  while(n)
        {
            ans++;
            n&=(n-1);  //这里是计算 n 二进制中1的个数
        } 
    
  6. 直接不断地乘2,错以为每个偶数都可以包含在内,4*2=8,6就没有包含进去;

  7. 骗分,yes or no 二选一,运气好的话,拿一半多得分

  8. 学会剪枝,特殊情况,使用break 来缩短时间

  9. 编号坐标注意是从 0 开始还是 1 开始

  10. 双指针的一般思路就是,先想出来暴力朴素算法,然后使用双指针优化

各位,蓝桥杯加油!!

Alt

你可能感兴趣的:(蓝桥杯倒计时冲刺,蓝桥杯,职场和发展)