• 这里收录了一些本人犯过的弱智的、意想不到的错误,供后人参考

解题策略,时间安排!!!

  • 除了T1,不要把过多的时间放在某道题的某个数据点上,即使你认为很正确
  • 根据数据点多写几个数据分治

无向图双向存边时,边数组开边数的二倍空间;常见递归线段树开4倍空间!

  • 数组开小会越界,开太大则可能MLE
  • 这是一位被警示的后人

注意较大数组尽量不要开在栈上

  • 即使题目给的内存为512M,也要注意运行环境的栈大小
  • 比如开[1001][1001]的矩阵,尽量放在全局或在堆上分配
  • 具体见C++数组太大时报错问题

模数加const,不然可能会超时

  • 固定模数写成编译期常量后,编译器可以优化取模运算,用乘法、移位等代替除法;是否提速取决于编译器和优化设置
  • 洛谷P5175 数列

记得开long long

  • 无需多言
  • 比赛时在代码里加上提示以防自己忘记:
#define ll long long
//use long long!!!
//use long long!!!
//use long long!!!

对于数据比较BT的题,记得开__int128

注意大括号匹配!!!——NOIP2022篇

  • 特别离谱的错误
  • [NOIP2022] 种花
  • 因为这道题痛失NOIP2022的1=
  • 别问我为什么NOIP2022 T1只拿了1分
  • 我当时的代码是这么写的
int main(){
    读入t
    循环t次{
        读入每组数据
        }
        处理数据并输出(这里只处理了最后一组数据!!!)
}
  • 然后就只输出了最后一组数据的答案
  • 最后这题给了我1分,用于嘲讽我 答案错误99%

注意大括号匹配!!!——2024年10月洛谷月赛篇

  • 没错,在两年之后,我又犯了大括号的错误……
  • 但是和两年前是反过来的
  • 两年前,T1因为把输出每组数据的结果放在了循环外面,直接痛失1=
  • 两年后,10月月赛,T1因为把统计总个数放在了循环里,每次循环都输出了一下总数
  • 我和大括号有仇
for (ll i=0;i<k;i++){
    读入
    if (y>=x){
        tot++;
    }//  <- 我以为这个大括号是结束循环
    printf("%lld",tot);
    //然后就在这里输出总数了
}

注意大括号匹配!!! ——嵌套if篇

  • if(){}else{}嵌套不加括号导致外层的else匹配到里层的if
  • 查很久查不出来错哪,还是调试调出来的
你写的代码:
if (a)
    if (b)//里层if
        c=1;
else d=1;//你以为是外层if的else
实际执行的:
if (a)
    if (b)//里层if
        c=1;
    else d=1;//里层else
  • 我的解决方法:即使只有一条语句也要打大括号

多测不清空

  • 在循环T组数据加入注释以防自己忘记:
//clear!!!

读题时,看清楚谁比谁大——初赛篇

  • 2023CSP-S初赛 T18-5
将第 10 行中的 > 替换为 >=,那么原输出与现输出的大小关系为()
  • 分析后易知,替换后答案大于等于原答案,但不一定严格大于
  • 但是,题目问的是原答案和替换后答案比,主语是原答案,所以应该选“一定小于等于且不一定小于”
  • 离谱

读题时,看清楚谁比谁大——程序篇

-1,如果它小于答案。
1,如果它大于答案。
  • 是“它小于答案”,而不是“答案更小”
  • WA了5次才发现

__int128手写输出函数或快速输出函数,特判:0

  • 太弱智了
  • 否则什么也不输出
  • 浪费我洛谷一次每日数据下载次数。。。

过大的long long 乘long long,记得用龟速乘!

离谱的非ASCII符号

  • 从CSP2024比赛题目里复制出来的样例,TMD是非ASCII的负号
  • 比赛的时候查程序查了快半个小时才发现
  • 直接从下发数据中复制,不要从题目文档里复制

看清题目问啥!!!

  • CSP2024 T2 第二小问
  • 问的是:在不漏掉原本能检测到的超速车辆的前提下,最多能关闭多少摄像头。先用已有摄像头覆盖这些车的超速检测区间,求最少保留个数,是根据车选摄像头,用右端点排序贪心;最后用摄像头总数减去最少保留个数
  • 而我做成了:覆盖所有摄像头的最少区间数,根据摄像头选车…………
  • 我的评价是:倒反天罡