【学习笔记】 $learn \ from \ failure \ ? ( 雾$
\(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)