知识

Linux

Ctrl+Alt+T:打开终端(终端里输入 code 即可打开 viscode)

Win+空格键:切换输入法,如果没有汉语输入法在设置中能添加(这个快捷键可以在设置中修改,Supper 就是键盘上的 Win)。

Win:上面会有个小框,可以搜索应用

Win+A:打开应用聚集地

Win+V:打开通知列表(放大时间)

Ctrl+Alt+Del:切换账户

Alt+F4:关闭当前应用

Ctrl+Alt+Enter:虚拟机全屏或推出全屏

codeblocks

viscode 场上没插件,没有提示,但 codeblocks 自带了。

Viscode

可以 File -> Preferences -> setting 设置 Tab 大小,但是注意取消那里的一个勾选(一个蓝色连接)。

Ctrl+F:查找

Ctrl+H:替换

Ctrl+P:打开上面那个小框

  • >zen 可以开启 zen 模式(免打扰模式),按两下 Esc 推出

右键文件可以 select for compare 或 compare with selected,这样比较文本可找到第一个不同的位置。

Ctrl+`:打开运行框

Ctrl+Shift+`:新建运行框

  • ls:输出当前文件夹内的东西
  • cd+文件名:进入这个文件夹(文件名输入到一半,按 Tab 可以拓展出你想要的文件名)
    • cd+..:回到上一层
  • rm:后面加一些文件名,全部永久删除(小心点,删掉后回收站找不到的)
  • pwd:显示当前路径
  • mkdir:新建文件夹
  • touch:新建文件
  • mv:修改文件或文件夹名称
  • pc:复制文件或文件夹
  • Ctrl+C:中断当前命令
  • Ctrl+L:清空当前命令框

运行代码:g++ T1.cpp -o T1 -std=c++14 -O2 -g -Wall -Wextra -fsanitize=address,undefined && time ./T1

  • 可以将其看作建立了一个 exe 文件,但是注意 linux 没有 exe 后缀名.
  • 而且这条命令的后缀可以帮助你调试代码 (每个命令对应寻找一种错误,发现了错误就会报错)
  • Wall 生成所有警告信息
  • Wextra 打印额外(可能您并不想要)的警告信息
    • 这个是个好东西,变量没用到、逻辑判断没生效(例如 a=0 写成 a==0)、用两个不同类型变量比较,都会提醒。

上下键可以直接复制前面的命令行,就不用每次都敲那么长的命令了。

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

diff 1.out 1.ans 比较两个文件,diff -Z 1.out 1.ans 可以忽略掉多余的空

unlimit:

  • ulimit -a 输出空间限制情况。
  • ulimit -s $((512 * 1024)) 设置栈空间限制(KB 为单位)。
  • ulimit -v $((512 * 1024)) 设空间上限(不要在同一个 shell 窗口内多次使用 ulimit -v,事实上,可以多次使用 ulimit -v 来让新的空间限制变得更小,但变得更大会发生错误。)

ls -l 带绿的都是有可执行权限的,没有可执行权限的 .sh 文件需要 chmod +x 文件名 添加可执行权限。

time

time 返回的 real 就是平常 devcpp 返回的那个时间。

但是注意 -fsanitize 会导致运行时间满很多,所以要测时间时,不要用 -fsanitize。

time 的具体解释

https://blog.csdn.net/baoecit/article/details/133301696
https://www.cnblogs.com/zl1991/p/7412579.html

注意 fsanitize 会导致程序满很多,所以为了测是时间的话,通常使用 g++ temp1.cpp -o temp1 -std=c++14 -O2 -g -Wall -Wextra && time ./temp1 来测试。

time ./T1

  • real:从进程 ls 开始执行到完成所耗费的 CPU 总时间。该时间包括 ls 进程执行时实际使用的 CPU 时间,ls 进程耗费在阻塞上的时间(如等待完成 I/O 操作)和其他进程所耗费的时间(Linux 是多进程系统,ls 在执行过程中,可能会有别的进程抢占 CPU)。
  • user:进程 ls 执行用户态代码所耗费的 CPU 时间。该时间仅指 ls 进程执行时实际使用的 CPU 时间,而不包括其他进程所使用的时间和本进程阻塞的时间。
  • sys:进程 ls 在内核态运行所耗费的 CPU 时间,即执行内核系统调用所耗费的 CPU 时间。 现在,我们应该对这三个时间非常清楚了吧。

看下 👇 图,我没有加 freopen,手动输入, real 有 5s, 但是 user 只有 0.003s
image

``

bat:

:flag
gen %RANDOM% > test.in
wa < test.in > test.out
ac < test.in > ans.out
fc ans.out test.out
if not errorlevel 1 goto flag
pause

https://www.cnblogs.com/Aewrxuk/p/17646830.html
bash:

下面的 timeout 1,就是 time 的 real 超过了 1s 判 TLE

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
g++ run.cpp -o run -std=c++14 -O2

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

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

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

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

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

if diff test.out TTT3.out -Z; then
  echo "AC"
else
  echo "WA"
  exit 1
fi
#include <bits/stdc++.h>

using namespace std;
using LL = long long;
using PII = pair<int, int>;

int main(){
  ios::sync_with_stdio(0), cin.tie(0);
  mt19937 rnd(chrono::steady_clock().now().time_since_epoch().count()); // 精度极高的时间函数,听说是纳米级别?不清楚
  cout << 1 << "\n";
  int n = 100, m = 5;
  vector<PII> vt;
  for(int i = 1; i <= n; i++){
    for(int j = i + 1; j <= n; j++) vt.push_back({i, j});
  }
  shuffle(vt.begin(), vt.end(), rnd);
  cout << n << " " << m << "\n";
  for(int i = 0; i < m; i++) cout << vt[i].first << " " << vt[i].second << "\n";
  return 0;
}
#include <bits/stdc++.h>

using namespace std;
using LL = long long;
using PII = pair<int, int>;

// ifstream fin("test.in");

int main(int argc, char *argv[]){
  cout << argv[0] << " " << argv[1] << "\n";
  // 输入 ./run aasva,argv[1] 就等于 aasva,argv[0] 就等于 ./run,往后同理
  // 配合 ifstream 就可以同时读入大于 1 个文件。
  assert(system("g++ run.cpp -o run -std=c++14 -O2") == 0);
  for(int i = 1; i <= 2; i++){
    // system(("cp test" + to_string(i) + ".in test.in").c_str());
    system(("./run < test" + to_string(i) + ".in > test.out").c_str());
    assert(system(("diff -Z test.out ans" + to_string(i) + ".out").c_str()) == 0);
    cout << "AC" << " " << i << "\n";
  }
  return 0;
}
posted @ 2025-10-17 11:31  hhhqx  阅读(11)  评论(0)    收藏  举报