(1.)变量名不要用 (next) ,在某些编译器里可能是关键词,可以用 (nxt) 代替
(\)
(2.)在判断某些条件时应该写成
flag = 条件 ? 1 : flag;
而不是
flag = 条件 ? 1 : 0;
(\)
(3.) (c++) 自带的 log2
函数貌似会很慢,可以先预处理
for(int i = 1; i <= n; ++ i) log_2[i] = (i & (i - 1)) ? log_2[i - 1] : log_2[i - 1] + 1;
(\)
(4.)位运算尽量带括号,(因为太菜了,运算优先级搞不清
(\)
(5.)要是要用到 (long long) 乘法加法尽量把所有变量都设为 (long long),保不齐哪里就是几个 (int) 相乘又忘记强制改类型了就 (GG)
(\)
(6.)快速乘(在这之前我居然一直写的是 (O(log n)) 的龟速乘哈哈哈哈哈哈哈哈哈哈)
inline ll mul(ll x, ll y, ll p)
{
ll res = (ld) x / p * y + 0.5;
res = (ull) x * y - (ull)res * p;
return res < 0 ? res + p : res;
}
(\)
(7.)输出注意是否换行,是否空格
(\)
(8.) 清空数组少用 (memset) ,可以直接循环需要清空的范围
(\)
(9.)在处理很多数据的时候一定要想想相等的情况,或者重边之类的
(\)
(10.)数组下标不要从函数传到函数
(\)
(11.) 遍历字符串的时候用一个变量提前存字符串长度,否则是 (O(n^2)) 的
(eg:)
F(i, 0, strlen(s) - 1) //O(n^2)
int len = strlen(s);
F(i, 0, len - 1) //O(n)
(\)
(12.) 手动o2
#pragma GCC optimize(2)