我发电写的
  • 板块灌水区
  • 楼主GYHL
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/10/25 21:00
  • 上次更新2024/10/25 21:08:02
查看原帖
我发电写的
1009417
GYHL楼主2024/10/25 21:00

支持给个关注,求了

考场必备:调试和对拍

考试地狱笑话集合

  1. freopen 问题
  2. 数组少开问题、 没开long long(测试一下最大的数据,看看是否正常,是否有崩溃退出或者输出奇怪的负数)
  3. 多组数据没初始化
  4. windows上编译成功, linux上编译失败(例如__int128的问题)
  5. cin,cout 超时(只推荐scanf和printf)
  6. vector、deque、queue超时或超内存(推荐list)
  7. MLE (你可以 手动计算变量内存大小、 或者打开windows的资源管理器、或者在linux命令行上写top、ps查看内存使用)
  8. 吊死在一个题上

考试系统介绍

1. 命令行编译和gdb调试

编译命令:

  • cd 转到你代码所在的目录
  • windows 文件夹上方可以看到当前目录, linux 文件上 ctrl+L 看到当前目录
  • g++ a.cpp -o a 编译a.cpp, 生成一个名字叫做a的可执行文件

对拍脚本代码

(详细使用请看上方视频)

大概为了检查你的代码就是疯狂生成很多随机数据,让你的代码跑一个结果,暴力跑一个结果,比较一下是不是一样。

  • 对拍包含四部分:
    1. 数据生成代码(random.cpp)
    2. 暴力代码(brute.cpp)
    3. 你的代码(a.cpp)
    4. 控制脚本
  • windows下的控制脚本 通常如下:用txt文件编写,写好后把后缀改成.bat双击
g++ random.cpp -o random -g
g++ a.cpp -o a -g
g++ brute.cpp -o brute -g

:loop
    random > a.in   #'>'表示指定输出文件
    brute < a.in > brute.out  #'<'表示指定输入文件
    a < a.in > a.out 
    fc brute.out a.out #就是比较两个输出
    if %errorlevel%==0 goto loop  #如果一样就继续循环
    pause
  • linux下的脚本

通常保存在 run.sh中,在终端(就是那个黑色的框框)写bash run.sh执行:

#!/bin/bash
#这句话表示下面的代码按bash语言执行,就算不写这句话,在终端写 bash run.sh 一样也是可以运行的。

g++ random.cpp -o random -g
g++ a.cpp -o a -g
g++ brute.cpp -o brute -g

while true; do
    ./random > a.in   # '>'表示指定输出文件
    ./brute < a.in > brute.out # '<'表示指定输入文件
    ./a < a.in > a.out 
    if diff brute.out a.out; then  #比较两个输出
       echo "AC"
    else
       echo "WA"
       break
    fi
done
2024/10/25 21:00
加载中...