0.1 基本要求

算法比赛比较的是对某一个算法的熟练度,而不是尝试在考场上发明新思路。因此一定要刷够足够的题目,最好在300道以上。

0.2 基本流程

  • 仔细阅读题目,从中抽象出模型,看出这道题是在考什么知识点。
  • 回忆之前学过/练过的算法知识点,看有没有算法能解决这个问题。
  • 注意所使用的算法是否会超时。

    0.3 时间复杂度与超时的问题

    一般C++语言1秒可以计算0 常用基础知识点总结 - 图1次,因此只要计算次数小于0 常用基础知识点总结 - 图2,就不会超时
    按照如上规则,通过数据范围,可以倒推出题目对于时间复杂度的要求,然后倒推出题目可以使用的算法,y神总结如下:https://www.acwing.com/blog/content/32/
    例如,如果数据范围为0 常用基础知识点总结 - 图3,则一般要求时间复杂度为0 常用基础知识点总结 - 图4,这样计算次数才不会超过0 常用基础知识点总结 - 图5

    0.4 常用C++数据类型的范围

    | 数据类型 | 范围 | | —- | —- | | int | -2147483648~2147483647(大约在正负210^9左右)(4字节存储) | | long | -2147483648~2147483647(大约在正负210^9左右)(4字节存储) | | long long | -9223372036854775808~9223372036854775807(超过10^18次方)(8字节存储) |

0.5 常用的头文件和函数

  1. #include<iostream>

其中有cincout(用于数据规模小于0 常用基础知识点总结 - 图6

  1. #include<cstring>

其中有memset、memcpy
memsetmemset函数位于cstring库中,功能为将数组中指定的连续元素统一置为某一个数,函数原型为memset(数组名,要改为的数字,修改的内存空间大小(一般用sizeof))二维数组仍然适用
如将数组mp[2][2]清零,代码如下:
memset(mp, 0, sizeof(mp));
memcpymemcpy函数位于cstring库中,功能为将一个数组中的内容复制到另一个数组中,函数原型为
memcpy(接受复制的数组,被复制的数组,复制的内存空间大小(用sizeof))二维数组仍然适用
如将a[2][2]复制到b[2][2]中,代码如下:
memcpy(b,a,sizeof(b));

  1. #include<cstdio>

其中有scanfprintf(比cin、cout速度快)(用于数据规模大于0 常用基础知识点总结 - 图7

0.6 常用的技巧与小知识点

  1. main函数外声明的全局变量(包括数组)会被自动初始化为全0
  2. 使用位运算快速表示2的n次方**1<<n**表示二进制数1向左移动n位,即表示0 常用基础知识点总结 - 图8