您的位置:首页 > 其它

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

2017-12-22 21:21 337 查看

说在前面的:

看到很多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

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

空间:

以前不知道谁说过5000*5000的题就不要开6000*6000.

计算:

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

查看:

当太多数组不好计算时,infleaking提供了一种方法:

程序末尾加while(1);

运行。

去任务管理器里找。

栈:

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

但是本机爆栈如何调试?

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

-Wl,--stack=134217728


即可开大栈,后面数字自己可以调。

精度:

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

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

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

常数:

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

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

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

调试:

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

尽量把代码风格练的明朗一些吧,有些人的代码简直不忍直视(真不知道他们怎么坚持下来的)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: