- yeyou26 的博客
常用小 tricks
- 2025-7-2 17:26:20 @
OI
- 对于有关环的问题,考虑两种处理方式
- 枚举可能情况
- 复制一份变为序列问题
警钟长鸣
容易两行泪的东西
- 不会的时候看看是不是读错题了
- 太会的时候看看是不是读错题了
- 太会的时候最好确认一下算法假没假(手搓样例)
- 多测不清空,抱灵两行泪
- 交之前瞅一眼数据范围,检查所有乘法有没有可能爆
- 对于带 mod 问题,检查所有减法有没有可能出负数
- 手写队列注意够不够长(尤其注意spfa)
当你WA了调不出来
- 打擂台初值没赋好
- dp 初值没赋好
- 读入写错了
- 多测/二分check/重复利用行为 没清空
- 段错误了不知道为啥九成越界
- 做麻了的时候,重新缕一遍这题都要干什么并看看你的代码都干了什么
- 交错题了
- freopen没删/调试代码没删
- 去重之后没换
- 权值 DS 边界混淆
- 树上问题注意区分 u v 和 father,别给自己绕进去了
- 变量名写错了
- 数组 NM 写反了
CE
- “xxx的声明指定了两个以上的数据类型”:结构体等后面没写分号
- ISO C++ 不允许声明无类型的‘xxx’ [-fpermissive] 注意自定义类型名是不是写错了
- 永远不要忘了,
std::lower_bound
返回的是指针
WA/RE
- 注意字符串起始位置
- std::pq 默认大根
- 栈区定义的数据结构有没有初始化
本地测试技巧
size ./work
执行size ./work
命令会输出类似以下格式的信息:
- text: 可执行文件中的代码段(text segment)的大小,即程序的机器指令部分的大小。
- data: 已初始化的全局变量和静态变量的大小,包括数组的已初始化部分。
- bss: 未初始化的全局变量和静态变量所占用的空间大小。
- dec: 文件总大小的十进制表示。
- hex: 文件总大小的十六进制表示。
- filename: 可执行文件的名称。
bool f1; int a[1000000]; bool f2; cout<<(&f2-&f1)/ 1024.0;
ulimit -s [KB]/unlimited
老生常谈的栈空间-fsanitize=address,undefined
码字常用寄巧
令人舒适的矩阵(常用于矩阵乘法)
struct matrix
{
struct line
{
int a[12];
inline int& operator[](const int &idx) { return a[idx]; }
};
line a[12];
inline line& operator[](const int &idx) { return a[idx]; }
};
除法与右移
- 右移向下取整,除法向0取整
常用函数
scanf("\n %d \n",a);
在scanf中添加空格或者\n的意义都是忽略所有空白字符,而不是忽略一个换行符或者一个空格 在前后都一样
cout.precision(6); // 设置精度
cout.setf(ios::fixed); // 精度指小数点后位数 使用一般方式输出浮点数
cout.unsetf(ios::fixed); // 精度指有效数字位数 系统可能使用E来表示浮点数
cout.setf(ios::showpoint); // 输出小数部分的后置零
unsigned long long tmp[10];
memset(tmp, 0, sizeof(tmp)); // 0000 0000
memset(tmp, -1, sizeof(tmp)); // 1111 1111
memset(tmp, 0x3f, sizeof(tmp)); // 1e9 / 4e18 量级 相加不爆 0011 1111
memset(tmp, 0x7f, sizeof(tmp)); // 2e9 / 9e18 量级 相机会爆 0111 1111
memset(tmp, 0xc0, sizeof(tmp)); //-1e9 / 4e18 量级 相机不爆 1011 0000
memset(tmp, 128, sizeof(tmp)); //-2e9 / 9e18 量级 相加会爆 1000 0000
// unsigned 类型现推就行 相加不爆 0x7f 最大值0xff
memcpy(target + 1, text + 1, sizeof(int) * len);
memcpy(target, text, sizeof(text));
std::reverse(a, a + 9); // 区间反转 左闭右开
std::unique(a, a + 9); // 去重 左闭右开 返回第一个重复元素的指针
exit(0); // 结束程序
std::random_device seed;
unsigned int sd = seed();
std::mt19937 rd;
rd.seed(sd);
rd.operator()();
std::lower_bound(a+1,a+1+n,val);(大于等于,返回指针)
__builtin_popcount(j)
一些奇奇怪怪的关键字
mutable
关键字,修饰的变量将永远处于可修改状态(包括在const类或函数里)immutable
与之相对,详见link 应用:Chtholly Tree
lambda 表达式
- 基本格式 [捕获列表] (参数列表) -> 返回类型 {函数主体}
- 捕获列表 [] 不捕获任何外部变量 [=] 按值捕获全部外部变量 [&] 按址捕获全部外部变量 [=,&a] 除a按址捕获,按值捕获其他变量 [&,a] 除a按值捕获,按址捕获其他变量 [a,&b] 按值捕获a,按址捕获b
- 省略 返回类型和前面的->可以省略,编译器自动推断返回类型