各种要有认知的常识、技巧(updating~~)

说在前面的:

看到很多dalao的博客都有这种东西,想起NOIP的经历,不禁心酸。

为了避免那样的事情再发生,防止发生,禁止发生(重要的事情说三遍!!!),博主经过深思熟虑,决定开这篇博文。

这篇博文的内容可能来自于博主自身的车祸,或者是博主身边基友的车祸,或者是博主在网上看到的车祸,总之都是经验。

由于某P将被淘汰,所以这篇博客讲的都是C++的错误。

头文件:

知乎上告诉我们:
这里写图片描述

NOI官网告诉我们:
这里写图片描述
理论终归是理论,最好还是不要用什么奇奇怪怪的东西,翻车就……呵呵了。

#include<cmath>
#include<string>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iostream>
//一般要打上面的头文件,注意string和cstring是不一样的。 
#include<ctime>
#include<set>
#include<queue>
#include<bitset>
//上面的自行选择,其它的黑科技我暂时不会,所以头文件也没有。 
#define fo(i, x, y) for(int i = x; i <= y; i ++)
#define fd(i, x, y) for(int i = x; i >= y; i --)
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))
//上面是常用宏,缩代码用的。
//注意min,max中a,b不能是一些运算量大的函数,如果是相当于计算了两遍。 
using namespace std;

读入输出:

printf注意事项:

long long:

在没有某插件的WindowsXP下,%lld变成%d(NOIP考场亲测),此时64位长整型只能用%I64d。

在打了补丁的WindowsXP及Window7以上的系统,%lld,%I64d都可以。

在Linux下,只能用%lld,所以在比赛中,如果出现电脑不能用%lld,可以用%I64d代替调试或直接忽略,但是在提交时一定要改成%lld。

unsigned long long:用%llu。

long double:用%Lf。

实数保留小数:%.xlf或%.xLf(x是保留的位数)。

高精度补零:%0xd或%0xlld(x是补齐零后的位数)。

三种输出方法的时间比对:

OI c++主要的读入输出方法有三种:

1.cin,cout

2.scanf,printf

3.getchar()读入优化,putchar()输出优化。

读入输出优化的板子链接。

由于cin关同步我们不知道能不能用,所以不考虑它。

接下来给出三种方法的时间(按上面的顺序,仅作参考):

读入:
1MB: 63ms,42ms,10ms
10MB:631ms,410ms,97ms

输出:
1MB:35ms,13ms,11ms
10MB:355ms,102ms,103ms

相信读者从上面的数据可以得出自己什么时候该用什么东西。

空间:

以前不知道谁说过50005000的题就不要开60006000.

计算:

记住每个变量占的字节,空间=字节*大小/1024^2(MB)。

查看:

当太多数组不好计算时,infleaking提供了一种方法:
程序末尾加while(1);
运行。
去任务管理器里找。

更新:这个方法好像萎了,提供一种通用的方法:

windows下:
用cmd或者powershell进入到这个文件夹:
输入"size a.exe",倒数第二个就是静态内存,单位byte

linux下:
终端打开文件夹,输入"size ./a",同上

注意这是静态内存,它是没有运行程序得到的,就是那些死的数组,但是栈、set、map、vector这些是不算的。

栈:

NOI系列赛的栈和正常空间是一起算的了,我们不用打那个TMD人工栈。

但是本机爆栈如何调试?

打开c++,工具,编译选项,在编译时加入以下命令的框里输入:

-Wl,--stack=134217728

即可开大栈,后面数字自己可以调。
单位是byte,比如说栈限制是8MB,则后面数字为810241024

还有就是,很难去根据递归层数去计算用了多少栈,因为c++栈里用了很多参数,我不清楚是怎么样设计的

精度:

实数判等于的时候一定要作差取绝对值再判小于一个1e-8左右。

实数高斯消元时记得提当前系数最大的上来。

实在不行可以用__float128这种黑科技,但是巨慢,并且考试时不能用。

常数:

如果模块化的函数太多了,可以提至主程序。

尽量不要用algorithm自带的min,max,超级慢,可以用define+三目运算符搞,注意没有记忆化的函数调用时不能这样用。

做数论题时最好不要全文替换long long,以前我就被一个分块时用了long long慢了一倍坑惨了。

调试:

其实博主不太会用c++自带的调试,博主依然采用传统的断点输出调试(好吧一定会改的),c++自带调试有些东西也做不了,但是在简单调试时没有问题。

尽量把代码风格练的明朗一些吧,有些人的代码简直不忍直视(真不知道他们怎么坚持下来的)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值