这里写目录标题
- 一级目录
- 先给他编译器一顿修理
- 蓝桥对答案多一个空格或者回车等,不敏感
- 要将所有的样例都试全
- 拿到问题如果不是很明显的类型题,先暴力或者模拟,看看时间复杂度允不允许
- 多使用函数,多进行分布,这样有利于逻辑的清晰
- 好好审题,充分理解题意,磨刀不误砍柴工
- 使用cout来debug
- 一定要编译通过了再提交,哪怕是填空题,算出来答案也要把整体代码拷到编译器上编译运行一下再提交
- 填空题也有困难题,找自己能做的
- 关于longlong的强制转换
- scanf过滤某模版读入关键数据
- 对于高精度 加减乘除 何时需要while除去前导0的问题
- 数据范围和爆int
- 可以注意一下限制时间
- 对于那些数据组需要被记录下来,且要进行联系的数据,可以使用结构体
- i 的灵活运用
- 输入n行不一定非要用while(n --)
- 关于N开多大的问题
- 报一些奇怪的错误时(比如显示winmain、源文件未编译等等)
- int取值范围、一二维数组空间上限、1s内的最佳数据量
- 关于int型数据乘除的细节
- 当题目要求计算的值要mod p时,某些计算过程中就要时刻记得mod p(前提是不影响最终的结果)
- 输入输出long long
- 对拍(用不用吧)
- 加速
一级目录
先给他编译器一顿修理
先选择debug,之后再进行后续的调试
第二种规定c++11标准的方法:
首先要保证上面是Debug
然后勾选编译时加入以下命令,然后输入-std=c++11
设置代码补全:
划到最下面,然后修改为ctrl+enter
然后就可以在你输入到一半的时候,如果没有自动弹出来代码提示,可以调用ctrl+enter了
他可以提示如下信息:
修改主题:
蓝桥对答案多一个空格或者回车等,不敏感
要将所有的样例都试全
拿到问题如果不是很明显的类型题,先暴力或者模拟,看看时间复杂度允不允许
多使用函数,多进行分布,这样有利于逻辑的清晰
好好审题,充分理解题意,磨刀不误砍柴工
使用cout来debug
如此代码,在每个循环步添加循环输出,且打印回车和分割线
注意:最后提交代码时将其删掉
一定要编译通过了再提交,哪怕是填空题,算出来答案也要把整体代码拷到编译器上编译运行一下再提交
填空题也有困难题,找自己能做的
关于longlong的强制转换
如果计算过程中出现int越界,那么就需要在等号右边计算的时候就加上(long long),之后看运算结果能不能回到int范围,如果回不到,那么等号左边的变量也要用long long 类型来接收,要是可以回到int,那么就可以使用int(建议都改为long long,因为算法对空间很宽松)
比较时尽可能用乘法,可以移项的移项
scanf过滤某模版读入关键数据
对于高精度 加减乘除 何时需要while除去前导0的问题
对于高精度 加减乘除 ,在做大 -> 小 的算法时,需要除去前导0
大 -> 小:
减法、除法
(且注意,while循环里是C.size() > 1 ,因为考虑到当C.size() == 1 && C.back() == 0时,答案一定是一个一位数:0,此时0就是答案,别除去)
数据范围和爆int
注意数量级前面的数,同时注意如果数据来到了1e8、1e9,且有求和、求积的操作时,注意要用LL类型
可以注意一下限制时间
虽然数据范围大,但是限制时间少,可以考虑暴力
对于那些数据组需要被记录下来,且要进行联系的数据,可以使用结构体
题目要将所有的数据输入之后,将每个数据组按照时间从小到大进行排序,所以,可以先使用结构体将其绑定,之后定义结构体类型的数组
然后输入各个部分的数据,之后sort排序时,要自己定义一个自定义函数,用于结构体变量之间的比较规则的制定,如上图,参数使用每个参与比较的元素的常量引用,返回小于就是从小到大排序
注意1
要想多个结构体成为全局变量,那么就要用到结构体数组,在定义时,不要typedef,因为他是重命名结构体变量的,直接struct{} S[]即可,或者typedef struct{} S; S snum[],也可以
struct S {
…
};
S a;
S s[N];
注意1
i 的灵活运用
for循环的 i 可以拿到外面,且用于for循环结束后的元素索引,以及将 i - 1,进行倒退,以拿到循环结束后的最新值)
输入n行不一定非要用while(n --)
for与while是等效的,甚至有的时候更适合输入数据(比如向数组中输入),所以,要视情况而定
关于N开多大的问题
我们在开N的时候,不能仅仅关注N所代表的是哪个数据,最保险的做法是,看所有的数据,找到数据量最大的那个,然后开他的空间大小+空余量,但是如果数据过多,或者过大,则要依据原理,原理是:我们的代码中,用到下标的变量的数据范围+空余量
我们如果仅关注N所代表的数据,那么就是草药的数量,即小于等于100,但是我们的代码中,用到了输入量 t ,做下标循环。那么这个时候,就要开T的范围,所以我们不能仅看N所代表的数据,还要看我们的代码中用到了哪些变量,那些变量的数据范围
报一些奇怪的错误时(比如显示winmain、源文件未编译等等)
1、main函数的main写错了
2、二维数组超出空间限制
全局二维最多开2万3 * 2万3
int取值范围、一二维数组空间上限、1s内的最佳数据量
int、long long的取值范围
-2147483648~2147483647(负1e9~1e9)
10的9次方,一共10位
有符号:2的32次方
无符号:-(2的32次方/2)~(2的32次方/2)-1
-922 3372 0368 5477 5808 ~ 922 3372 0368 5477 5807(负1e18~1e18)
long long 为10的18次方,一共19位
有符号:2的64次方
无符号:-(2的64次方/2)~(2的64次方/2)-1
数组空间上限
局部变量只能开50 0000,而全局变量能开2 0000 * 2 0000 = 4 0000 0000
我们主要针对全局来看,一维能开4 0000 0000,二维能开 2 0000 * 2 0000
c++1s内的数据量
10的7次方
关于int型数据乘除的细节
如果可以保证 a / b 中,a > b,那么这里使用int型数据就没啥问题
当题目要求计算的值要mod p时,某些计算过程中就要时刻记得mod p(前提是不影响最终的结果)
只要有一个二元运算,就mod p,不然可能会爆范围,同时在最前面加上(LL)
输入输出long long
对拍(用不用吧)
假如我们拿到一道题,我们可以会编写他的暴力代码,以及高级算法,但是暴力算法只能拿一部分的分数,而高级算法的时间复杂度是符合题目要求的,但是我们不能保证高级算法百分百正确,那么如何验证高级大概率是正确的呢,我们可以写出来暴力算法以及高级算法,然后在两边测多组数据,如果每次的结果都一样,那么高级算法大概率是对的
加速
应急使用
注意要放在main函数的最上面,首要操作