如果看到这里的各位是想要参加竞赛,那么接下来一点一些小魔法大家可以修炼一下下。
万能头文件
在那遥远的编程王国,藏着一件传说中的秘宝——bits/stdc++.h
,这不仅仅是一块普通的头文件石碑,它是C++语言魔法的集大成者,被誉为编程者的“万能钥匙”。
#include<bits/stdc++.h>
在这薄薄的一行符咒之下,蕴藏着庞大的知识体系:从基本的输入输出流iostream
,到神奇的标准模板库STL
的全副武装——容器如向量vector
、列表list
、映射map
的魔盒,算法如排序sort
、查找find
的魔杖,一应俱全;还有那些操控字符串的符文string
,以及处理数值与数学运算的古老符咒cmath
、cstdlib
……所有这些,只需一个简单的包含指令,便如同打开了一扇通往无限可能的大门。
使用了这个头文件后,一般竞赛所需要用到的头文件都可以不用再写了,因为都已经包含在这里面了。
加速技巧
在c++中,cin和cout的速度并没有scanf和printf快,但是cin和cout写起来很简洁,但是有些题目会卡时间,数据量非常大的情况下,用cin很有可能会超时。
所以,我们可以使用关流。
在输入前加这么一句话:
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
好处总结:
- 提高速度:关闭同步可以显著减少I/O操作的开销,特别是在大量数据读写时,使得程序运行得更快。
- 减少延迟:C++的
cin
和cout
在未同步时,可以利用缓冲区更高效地处理数据,减少读写延迟。 - 优化竞赛编程:在ACM等编程比赛中,毫秒之差决定胜负,此技巧常用于追求极致的执行效率。
注意事项:
- 兼容性问题:禁用同步后,C++ I/O流和C风格I/O函数之间可能无法正确交互,使用时要确保程序中只使用一种风格的I/O。
- 只应在必要时使用:在日常开发或不需要极端优化性能的场合,保持默认同步状态可以避免潜在的错误和麻烦。
因此,ios::sync_with_stdio(0)
就像是给你的魔法图书馆安装了一个“超速模式”,虽然强大,但需谨慎使用。
除此之外
我们还可以使用快读来代替cin
//快读inline int read(){int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}return x*f;}
这是一种比关流更快的读入方式,如果使用了快读还是超时,那么就是算法存在问题了。
我们还可以使用\n来代替endl
在程序最前面定义
#define endl '\n'
代码简化
在写long long的时候 要写这么长一个字符可能在打字上有些许的耗费时间,我们可以直接用ll代替
#define ll long long
这样写起来是不是快多了[狗头]
好啦,今天的一些小魔法就介绍到这里,专栏再见哦~记得点点关注~