【置顶】码风与卡常技巧

我的码风与卡常技巧,以下内容基本贯穿全站。

注意事项!

运算符的优先级

参见运算符的优先级
然后我个人经常被【三目运算符的超级低优先级】坑害而花大量时间调试……

码风

最大数的表示

int下:
memset(127)=0x7fffffff=2147483647
memset(63)=0x3f3f3f3f=1061109567
通常用0x3f3f3f3f表示INF,因为两个INF相加不会超过int极限,且正好与memset(63)相同

大括号

以for为例

1
2
3
4
for(int i=555;i<=666;i++)
{
......
}

空格

运算符周围没有任何空格i=a+b
左圆(方)括号后、右圆(方)括号前,
在书写长表达式时,为了便于阅读,可以加一个空格,
f[i][j]=f[ f[i][j-1] ][j-1]

0与1

  1. 通常情况下,数组、字符串、循环等都从1开始,
  2. 仅对与二进制性质、运用有关操作时,才从0开始。
  3. 表示逻辑值时,除非要输入用int(避免溢出),否则用bool

结构

  1. #include中,C标准库头文件必须使用c前缀,而不是.h后缀,并应该放置于C++ 标准库头文件前,如果有其它头文件应放置于最后。
  2. 所有的预编译指令(包括#ifdef等)不能缩进。
  3. main函数应该放置于整个程序末尾。
  4. 多个意义独立的代码块之间应该用空行隔开。
  5. 通常情况下,除非有依赖关系,否则离主函数越近则越接口化,越远则越底层。
  6. 对于每个代码块,使用4空格或等长的Tab缩进。

变量名

  1. 局部变量必须在用时定义
  2. 所有常量命名为全大写
  3. 所有结构体命名为首字母大写,其他小写
  4. 其他所有需要命名的地方为全小写
  5. 避免危险的变量名如 next time x0(cmath) y0(cmath) hash (可以自己建立namespace规避)

技巧

数组空间

64MB 1kw
128MB 2kw
256MB 5kw
512MB 10kw 【谨慎使用】

时间复杂度

1s 10kw

读入

应用范围:大量输入
这个就灰常常用啦

1
2
3
4
5
6
void read(int &s)
{
s=0;char c=getchar();
while(c<'0' or c>'9') c=getchar();
while(c>='0' and c<='9') s=s*10+c-'0',c=getchar();
}

函数的定义

inline应用范围:不递归的简单、频繁调用函数

1
inline int lowbit(int x) {return x&(-x);}

计算

平时多用点位运算啦

1
2
3
(a&1)=(a%2==1)
(a<<1)=(a\*2)
(a>>1)=(a/2)

sort的使用

曾经天真地以为加上=可以少点交换,
然鹅可能是具体实现方式吧,加上更慢……

1
bool cmp(Num a,Num b) {return a.prime<b.prime;}

memset

全局变量默认是0,没必要再置零了

LCA

我个人是比较稀饭倍增的
但是如果会T,可以考虑变成ST表,常数÷6
如果预处理log值,还可以常数÷5,加起来就超级快了
条件:没有修改

取模素数

19260817
萌娘百科

字符串hash进制数

13331或者131

本文基于 知识共享署名-相同方式共享 4.0 国际许可协议发布
本文地址:http://zory.ink/posts/3834.html
转载请注明出处,谢谢!

哪怕是一杯奶茶,也将鼓励我继续创作!
0%