-
使用
namespace封装一个模块,如namespace SegmentTree和namespace Graph。 -
使用
using x :: y引用x中y元素。 -
可以把
using ...直接写在namespace的右大括号后面而不是单独占一行。 -
使用
#define open(x) freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout)来快速打开输入输出文件,若要打开sample.in和sample.out那么写一个open(sample);不需要加引号即可。 -
使用
cerr << 1e3 * clock() / CLOCKS_PER_SEC << "ms\n";在控制台而不是终端输出你的程序运行时间。 -
在你开始创建数组等元素前定义一个
bool类型的变量,如bool MemoryST;在main函数之前再定义一个bool MemoryED,这样你就可以通过cerr << fixed << setprecision(6) << (&MemoryED - &MemoryST) / 1024.0 << "KB\n";输出内存大小。 -
在调用类似于
init的初始化函数时,可以在定义完init后写一个bool _ = (init(), 0)完成调用。 -
对于
string类型的变量x,可以用for (char c : x)按顺序访问每个字符。 -
对于
vector类型的变量x也可以用for (auto y : x)按顺序访问,其中auto可以换成vector中元素的类型。 -
对于用于计数的变量,可以命名为
Xcnt,其中X为该变量计数的对象的首字母,如对边进行计数就用ecnt,对点计数就用ncnt。 -
写快速幂时用一个
for (; y; y >>= 1, x *= x)来代替while(y)和y >>= 1, x *= x。 -
在模 ppp 意义下进行的运算可以封装成一个函数,如
add(x, y)代表 (x+y) mod p(x + y)\bmod p(x+y)modp,也可以直接写一个Modint的结构体。 -
总是优先写链式前向星而不是邻接表,常数优且可以按顺序保存边的信息。
-
在
for循环中的int i = 1后面跟着定义只有循环内才会用到的变量,如输入 (u,v)(u,v)(u,v) 这条边时就for (int i = 1, u, v; i <= m; i ++)。 -
对于一个
pair类型的元素p,用auto [x, y] = p来得到p.first和p.second。 -
在
sort中定义比较函数时,写成sort(arr + 1, arr + size + 1, [&](const ... &X, const ... &Y) { ... });,把比较的部分写在内层大括号中,或者重载arr的类型的 <<< 号。 -
打部分分时整个封装成
namespace SubtaskXXX的形式,一档分封装成一个;在主函数中存储所有输入,判断特殊性质 / 是否运行暴力,然后执行对应namespace中的函数。 -
快读时写成
s = (s << 3) + (s << 1) + (c ^ 48), c = getchar();,看起来就厉害。 -
取模时,若是加法,那么应当加完后判断是否超过模数,若超过则减去模数;减法同理;乘法时写成
1ll * x * y % p。欢迎补充。
【经验】C++ 算法竞赛代码技巧
最新推荐文章于 2025-12-31 19:32:08 发布
4821

被折叠的 条评论
为什么被折叠?



