知识
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

``
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;
}

浙公网安备 33010602011771号