输入,人家是l,x,y,你整成了,x,y,l,关键半天没反应过来,对着正确答案一个一个字母改才意识到。(所以说有时候用例过了也不能确保没有出现这些小错误,如果数字一样,可能真也能过)
还有不要乱写return,搁花括号里面写了return,for循环就执行了一个就卡住了,也是对着正确答案一个符号一个符号找才发现顺序错了,人先有花括号才有的return。
思路有变改什么东西变量名的时候要改彻底删干净。
不要由于懒得起名字,而不小心起了重复的数组名,可以在纸上记录一下用了哪些变量名。
&&的优先级高于||,注意同时出现的时候不要嫌麻烦忘记加括号。
在合并时,你调用 unionn(i, j),但 unionn 的参数应该是 r1 和 r2(即 find(i) 和 find(j) 的结果),而不是 i 和 j。直接合并 i 和 j 会导致并查集的结构不正确。
-
并查集的树形结构不完整,部分节点无法正确指向根节点。
-
路径压缩可能无法正确执行,导致
find
时间复杂度退化。 -
某些本应合并的集合未被合并,导致连通分量统计错误。
解方程的题目别一上来就for循环穷举,咱先计算一下呢。人z=tanθ*x,原式是z^2+x^2,你怎么把z^2给忘了呢,结果分离不出来只能去穷举试了吧。
int
和 signed
在C++中是等价的,但 #define int long long
不会影响 signed
,因此 signed main()
仍然返回 int
。
为什么 signed main()
可行?
-
signed
是int
的别名(signed
默认就是signed int
)。 -
#define int long long
不会替换signed
,所以signed main()
仍然是合法的int main()
。 -
这是一种 规避宏定义影响 的技巧,在竞赛编程中常见。
typedef long long ll + int main() | 最规范,避免宏污染 |
return 0
的位置错误
在 while(t--)
循环里,你写了 return 0
,这会导致 程序在第一次循环后就退出,无法处理所有测试用例。
修正:移除循环内的 return 0
,改为在 main()
最后返回。CAO半天没反应过来。还在想为什么这个终端停在了这个地方。
别老是由于之前思维的惯性而在改动时写错字母没改全。
写条件分支的时候有分就有收,不要漏掉该种正确情况下叉出的分支对应的无解,还是要单独再写一遍的。
ios::sync_with_stdio(false); cin.tie(nullptr); 添加了ios::sync_with_stdio(false)
和cin.tie(nullptr)
加速输入输出
有时候编译错误可能是因为段落的复制出现了失误操作却没看出来没删干净,可能由于接到了行中间段尾,而出现了换行失败,所以看得不明显。