Linux 小知识

hhhqx 的博客

一些指令

image

🛠️ 编译运行代码

编译代码:g++ temp.cpp -o temp。生成类似 .exe 的东西(没有后缀名)。

运行:./temp。或者是 time ./temp,会输出三个时间:\(\text{real, user, sys}\),评测机判题看的是 \(\text{real}\) 所以一般也只看 \(\text{real}\)

可以合在一起:g++ temp.cpp -o temp && time ./temp。或者g++ temp.cpp -o temp -std=c++14 -O2 -g -Wall -Wextra -fsanitize=address,undefined && time ./temp

  • 其中 Wall 生成所有警告信息。
  • Wextra 打印额外(可能您并不想要)的警告信息,这个是个好东西,变量没用到、逻辑判断没生效(例如 a=0 写成 a==0)、用两个不同类型变量比较,都会提醒。
  • 后面串似乎没什么用。加不加无所谓。

./temp 后面加> 1.in< 1.out 可以实现 freopen

diff 1.out. 1.ans 比较两个文件是否相同。

  • -Z 忽略行末空字符。(推荐)
  • -w 忽略所有空白字符(包括空格,换行)。
  • -b 忽略所有空格变化。

📊 time 输出三个时间含义

时间类型 描述 包含内容
real 从进程开始到完成的总时间 进程实际使用的 CPU 时间 • 进程阻塞时间(如 I/O 等待) • 其他进程占用时间(可能会有别的进程抢占 CPU)
user 进程用户态代码执行时间 仅进程实际使用的 CPU 时间 • 不包括其他进程时间 • 不包括进程阻塞时间
sys 进程内核态运行时间 执行内核系统调用的 CPU 时间

下图中未使用 freopen,进行手写输入输出,\(\text{real}\)\(6s\)\(\text{user}\) 只有 \(0.003s\)。所以 freopen 是很有必要的。

image

分析: 这表明程序大部分时间花费在 I/O 等待上,实际 CPU 计算时间很短。


对拍

由四个东西组成,gen.cpp, ac.cpp, run.cpp, dp.bash。分别是随机数生成器、正确代码、对拍代码以及一个 bash

gen.cpp

#include <bits/stdc++.h>

using namespace std;

int main(){
  ios::sync_with_stdio(0), cin.tie(0);
  mt19937 rnd(chrono::steady_clock().now().time_since_epoch().count()); // 精度极高的时间函数,听说是纳米级别?不清楚
  cout << (n = rnd() % 100 + 1) << '\n';
  //...
  return 0;
}

bash

运行 bash 前需添加可执行权限。使用 chmod + x 文件名

image

g++ gen.cpp -o gen -std=c++14 -O2
g++ ac.cpp -o ac -std=c++14 -O2
g++ run.cpp -o run -std=c++14 -O2

t=0
while true; do
let t++
echo "###"$t
./gen > test.in
./ac < test.in > ans.out

timeout 1 ./run < test.in > test.out
if [ "$?" -ne 0 ]; then
  echo "TLE"
  exit 1
fi

if diff ans.out test.out -Z; then
  echo "AC"
else
  echo "WA"
  exit 2
fi

done

来解释一下,方便背诵。

  • 前面三行用来生成可执行文件(windows 中的 exe)。

  • echo 是输出(cout),$t 是用来输出 \(t\) 这个数字而不是字母 t\(t\) 表示拍了几组。

  • ./gen > test.in 生成随机数据到 test.in

  • timeout 1.5 ./run < test.in > test.out 是运行 run.cpp 并检查是否超时(\(1.5\) 可替换为其他的。判断的是 real 时间)

  • 如果超时输出 TLE 并退出程序 。

     if [ "$?" -ne 0 ]; then
       echo "TLE"
       exit 1
    
  • 否则比较两个输出是否相同。

posted @ 2025-10-31 15:28  xiehanrui0817  阅读(16)  评论(0)    收藏  举报