写这篇 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. sharding-jdbc分库连接数优化

    一.背景: 配运平台组的快递订单履约中心(cp-eofc)及物流平台履约中心(jdl-uep-ofc)系统都使用了ShardingSphere生态的sharding-jdbc作为分库分表中间件, 整个 ...

  2. LeanCloud 国内域名解析问题,博客评论及阅读数显示失败

    近日,LeanCloud 国内域名解析存在问题,个人博客基于LeanCloud构建的评论及阅读数显示失败. 个人博客地址 关于 LeanCloud 国内域名解析问题的情况更新(6 月 21 日) 声明 ...

  3. 在DevExpress的GridView的列中,动态创建列的时候,绑定不同的编辑处理控件

    在使用DevExpress的GridView的时候,我们为了方便,往往使用一些扩展函数,动态创建GridView列的编辑控件对象,然后我们可以灵活的对内容进行编辑或者使用一些弹出的对话框窗体进行处理内 ...

  4. GitHub搜索指令教程

    in:根据某个关键词来进行检索 关键词: name:项目名称 description:项目描述 readme:项目帮助文档 语法: 需要检索的内容:in:name或description或readme ...

  5. 层叠样式表(CSS)2(环境:MyEclipse 10)

    二.选择器 注:在head里面写选择器的内容.环境一直不变,所有HTML和css都是这个MyEclipse 10 1.基本选择器(每个选择器新建一个HTML网页测试学习) 元素选择器:按节点名称匹配元 ...

  6. Abstract Factory 抽象工厂模式简介与 C# 示例【创建型1】【设计模式来了_1】

    〇.简介 1.什么是抽象工厂模式? 一句话解释:   提供一个接口,以创建一系列相关或相互依赖的抽象对象,而无需指定它们具体的类.(将一系列抽象类装进接口,一次接口实现,就必须实例化这一系列抽象类) ...

  7. don't be shy to use reshape

    don't be shy to use reshape

  8. 你们眼睛干涩,胀痛吗?C# WPF 久坐提醒桌面小程序

    目录 说明 设置提醒时间,及休息时间 久坐提醒倒计时 休息提醒倒计时 休息到计时 代码说明 主窗体设置 工作到计时 休息倒计时 源码 久坐提醒桌面小程序: 干这行职业病比较多,之前用爱丽(即:玻璃酸钠 ...

  9. 部分 Linux 换国内源

    Centos 8 / Redhat 8 换国内源 操作步骤 先把原本的官方 yum 源 删除 或 备份 cd /etc/yum.repos.d/ 备份(Redhat 同理) rename repo r ...

  10. 关于ChatGPT的一些闲扯淡(1)

    这篇写的有点迟了,前者子ChatGPT正火的时候,懒病发作一直拖延.今天对ChatGPT做一个简单的讨论,也是把学习的心得和大家分享一下. 首先什么是GPT,英文全称是Generative Pretr ...