写这篇 blog 的原因是某个小朋友要考 CSP 了还不会用 linux,怎么回事呢。

单击图片即可放大。

前置- linux 虚拟机的安装

  • 在官网 / 其他地方下载 VMware。

  • noi 官网 下载 NOI linux 的 .iso 文件。(可能系统会把这玩意识别成压缩包,但不要闲得没事把它解压了。)

  • 在 VMware 选“新建虚拟机”,类型选“推荐”。

  • 点“浏览”把刚刚下载的 .iso 文件选进去。

  • 然后一路默认配置,等待安装完成即可。


VScode 基础教程

这一部分仅限于能写代码,能编译运行。

DLU 的 Linux 系统语言默认是中文,但是 VScode 只有英文。请注意规避英语水平造成的操作问题。

打开文件夹

进考场的时候桌面上会已经建好一个以你考号命名的文件夹,比如 LN-001



我们先在电脑上找到 VScode。如果左边任务栏里有,就直接点开这个图标:



没有就点左下角的九个点找到它:



进来之后长这样。



点击 Open Folder,选择你考号的文件夹。

长这样就选好了。

关闭括号补全

这个不是必要的,但平时没有这个习惯还是关掉比较好。

左下角设置,选 settings:



点击 Text Editor



这四个改成 never 即可。

新建并编写代码

点击这个按钮新建代码。



输入文件名,一定不要忘写后缀 .cpp



打开它,就可以开始写了:

编译与运行

现在我们写好了程序。在下面找到长这样子的终端。(下面没有终端请按 Ctrl+`,就是波浪线那个键)

每次编译前一定要先按 Ctrl+S 保存,否则编译的是你上次保存的代码。

输入编译命令,格式为 g++ 你的程序名 -o 你想生成的可执行文件名。比如我想编译这个 T1.cpp,让它编译完叫 T1(类似于 dev 生成的那个 .exe),就输入:



正常应该是这样,如果有报错信息就是你代码 CE 了。

然后使用 ./可执行文件名 运行该程序。接上例,即为



然后在这个地方输入你要输入的东西即可。

按键盘上的上箭头,可以输入上一条命令。千万不要傻到每次都手敲一遍上述那一串东西(

在终端以外的地方复制/粘贴可以正常使用 Ctrl+C/V但在终端内要使用 Ctrl+Shift+V 粘贴样例。

保存代码

你写代码的过程存在哪里当然没人管,但考试结束的时候保存位置一定要正确。

一般来说保存在你考号的文件夹里,具体听考场通知。

会有老师在考试快结束前挨个检查存得对不对,不用太担心这个问题。


Linux 命令进阶

不必需,但建议会。

以下命令大部分可以叠加使用。

新建代码

使用 code a.cpp 新建一个 a.cpp 并打开。如果已有该文件,会直接打开原来的。

开 O2

在编译命令后加上 -O2。测速时记得要开,因为有时候真的快很多。如 g++ T1.cpp -o T1 -O2

开警告

在编译命令后加 -Wall,会警告比较常见的错误(如 int 函数没写返回值,if 里面写了一个等号)。

测静态内存

使用 size ./xxx 命令。箭头指的那个数是程序所用空间,单位是 B。

测时间

使用 time ./xxx 命令。real 是包括你输入所用的总时间,user 是只算程序运行所用的时间。使用文件输入输出时这两个数应该差不多。

输入输出重定向

想从文件读入,但懒得写 freopen,怎么办?(建议测样例的时候使用,但交题一定要写 freopen)

./T1 < qwq.in 运行程序 T1,并从 qwq.in 读入,输出到屏幕上。

./T1 > qwq.out 从屏幕输入,但输出到文件 qwq.out。

也可以结合起来用。./T1 < qwq.in > qwq.out,从 qwq.in 读入,再输出到 qwq.out。

查 UB(即,查 RE)

当程序运行出现 没有输出就结束了 / “段错误(核心已转储)” 的时候基本上是 RE 了。

使用 fsanitize 命令检查 数组越界/变量溢出/递归爆栈 等一系列未定义行为。

在编译选项后面加上 -fsanitize=address,leak,undefined

比如这段代码左移了一个负数,使用该命令就能查出来。

比对文件

使用 diff a.out b.out 比较 a.out 和 b.out 是否相同,执行完命令没有任何输出就是相同的。

使用 diff a.out b.out -Bb 忽略行末空格及文末回车。

手动开栈

Linux 的默认栈空间是 8M,在测大样例时如果出现递归爆栈的情况,可以手动开栈。

如将栈空间开到 100M,可以使用:ulimit -s 102400


对拍

对拍前,你需要:一份正解、一份暴力、一份数据生成器。

不包教学造数据,我觉得讲了一晚上应该不用再重教一遍。

然后需要一个 checker 来自动运行这三个东西,按照下面的板子写即可。

输入 ./checker 就可以开始对拍。

#include<bits/stdc++.h>
#define il inline
using namespace std;
int main()
{
system("g++ qwq.cpp -o qwq -O2"); //编译三份代码
system("g++ std.cpp -o std -O2");
system("g++ data.cpp -o data -O2");
for(int i=1;i<=10000;i++)
{
cerr<<i<<endl;
system("./data > qwq.in");
system("./std < qwq.in > std.out");
system("./qwq < qwq.in > qwq.out");
if(system("diff std.out qwq.out -Bb")) break;
}
return 0;
}

学会这些考场上应该基本够用了?那就先祝大家 CSP 2023 RP++ 啦(

NOI Linux 食用指北的更多相关文章

  1. VMware Workstation 安装以及Linux虚拟机安装 指北

    最近有挺多小伙伴跟我说起虚拟机这个东西,所以,今天就给大家写一篇虚拟机安装使用指北吧. 虚拟机(英语:virtual machine),在计算机科学中的体系结构里,是指一种特殊的软件,可以在计算机平台 ...

  2. .NET 跨平台框架Avalonia UI: 填坑指北(二):在Linux上跑起来了

    上一章回顾:  .NET 跨平台框架Avalonia UI: 填坑指北(一):熟悉UI操作 本篇将要阐述 包括但不仅限于Avalonia及所有Windows到Linux跨平台开发 的一些注意事项: 一 ...

  3. 颓废选手在 Ubuntu/Noilinux 下的生存指北

    颓废选手在 Ubuntu/Noilinux 下的生存指北 Hint: 这里的 "#" 都是假注释,复制的时候记得删除 一些基本的生存命令 ctrl + alt + t #调出终端 ...

  4. ThinkPHP 3.2.x 集成极光推送指北

    3.2版本已经过了维护生命周期,官方已经不再维护,请及时更新至5.0版本 -- ThinkPHP 官方仓库 以上,如果有条件,请关闭这个页面,然后升级至 ThinkPHP 5,如果由于各种各样的原因无 ...

  5. Markdown 标记语言指北 - 源码

    这是上一篇博客的源代码. 这是班刊约稿的一篇文章. 全文约6000字, 预计需要 60 分钟读完. # Markdown 标记语言指北 #### TOC 1. [什么是 Markdown?](#%E4 ...

  6. Markdown 标记语言指北

    这是班刊约稿的一篇文章. 全文约6000字, 预计需要 60 分钟读完. Markdown 标记语言指北 TOC 什么是 Markdown? Markdown 可以用来干什么? 第一步? 一些专业一点 ...

  7. Kinect_V1在Debian testing的配置指北

    在Linux下驱动Kinect V1现在有两种方式,一种是使用OpenNI + SensorKinect + Nite的方案,一种是使用OpenNI2 + libfreenect的方案,第一种我没有尝 ...

  8. tar命令基本、进阶使用指北

    tar命令基本.进阶使用指北 摘要 打包与压缩是我们在计算机系统日常使用中必备的一个工具,就如我们在使用Windows系统,也需要类似WinRAR的压缩软件来将许多数据.文件打包成一个文件,并压缩其占 ...

  9. Angular 从入坑到挖坑 - Router 路由使用入门指北

    一.Overview Angular 入坑记录的笔记第五篇,因为一直在加班的缘故拖了有一个多月,主要是介绍在 Angular 中如何配置路由,完成重定向以及参数传递.至于路由守卫.路由懒加载等&quo ...

  10. Mac 软件包管理器Homebrew使用指北

    Homebrew Homebrew由开发者 Max Howell 开发,并基于 BSD 开源,是一个非常方便的软件包包管理器工具. Homebrew 官网 Homebrew 的几个核心概念 在正式介绍 ...

随机推荐

  1. 一文了解 io.LimitedReader类型

    1. 引言 io.LimitedReader 提供了一个有限的读取功能,能够手动设置最多从数据源最多读取的字节数.本文我们将从 io.LimitedReader 的基本定义出发,讲述其基本使用和实现原 ...

  2. 通过ssh远程执行kubectl命令报错问题

    在使用Jenkins链接Kubernetes集群,如果Jenkins安装机器与Kubernetes Master节点不在同一台机器上面,需要使用ssh远程执行部署命令,如下: ssh root@10. ...

  3. JVM GC配置指南

    本文旨在简明扼要说明各回收器调优参数,如有疏漏欢迎指正. 1.JDK版本 以下所有优化全部基于JDK8版本,强烈建议低版本升级到JDK8,并尽可能使用update_191以后版本. 2.如何选择垃圾回 ...

  4. 【Kubernetes】yaml文件编写 -- 持续更新

    K8S通过yaml格式的声明式API与资源对象交互 API版本由apiVersion字段指定,API对象类型由kind字段指定 除此之外,每个API对象有三大类属性: metadata:元数据 spe ...

  5. ZEGO 即构音乐场景降噪技术解析

    随着线上泛娱乐的兴起,语聊房.在线 KTV 以及直播等场景在人们的日常生活中占据越来越重要的地位,用户对于音质的要求也越来越高,因此超越传统语音降噪算法的 AI 降噪算法应运而生,所以目前各大 RTC ...

  6. PaddleSharp:跨越一年的版本更新与亮点

    PaddleSharp:跨越一年的版本更新与亮点 我始终坚信,开源社区是技术进步的重要推动力,也是我抽出我业余时间,投入到PaddleSharp这个项目的原因,这个项目充分展现了.NET在复杂计算领域 ...

  7. Mapbox—geocoder搜索地点error eaching the server

    Mapbox-geocoder搜索地点error eaching the server --There was an errorr eaching the server 环境说明: vue3.3.4 ...

  8. django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported.

    django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing a ...

  9. 基于 Habana Gaudi 的 Transformers 入门

    几周前,我们很高兴地 宣布 Habana Labs 和 Hugging Face 将开展加速 transformer 模型的训练方面的合作. 与最新的基于 GPU 的 Amazon Web Servi ...

  10. 从 HTTP/1.1 到 HTTP/3

    从 HTTP/1.1 到 HTTP/3,解决了一些旧协议的问题,引入了好用的新功能. HTTP/1.1 HTTP/1.1 通过在传输层和应用层之间增加 SSL/TSL 解决数据不安全的问题,但它本身还 ...