首页 > 系统相关 >NOI Linux 食用指北

NOI Linux 食用指北

时间:2023-10-14 23:11:04浏览次数:43  
标签:指北 NOI 代码 T1 编译 Linux cpp qwq out

写这篇 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 忽略行末空格及文末回车。


对拍

对拍前,你需要:一份正解、一份暴力、一份数据生成器。
不包教学造数据,我觉得讲了一晚上应该不用再重教一遍。
然后需要一个 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,代码,T1,编译,Linux,cpp,qwq,out
From: https://www.cnblogs.com/ying-xue/p/17764843.html

相关文章

  • 【Linux 基础】gcc、g++多版本间的切换
    在make时可能出现版本过高的问题,因此需要进行版本切换。gcc多版本间的切换(g++配置方法一样,gcc换为g++即可)系统:ubuntu18方法:根据需要同步设置gcc与g++间的版本号1.gcc安装(多版本) sudoapt-getupdate sudoapt-getinstallgcc##安装最新版本,此处为7 sudoapt-getinstall......
  • Linux Kernel 4.13 RC6发布:正式版9月3日发布
    美国当地时间上周末,大神LinusTorvalds发布了Linux Kernel4.13内核的又一候选版本。上周发布的RC5版本更新幅度也要比上上周的RC4要小,LinusTorvalds表示本周发布的RC6版本属于常规更新,在过去一周的开发过程中并没有出现任何意外。RC6版本主要对网络、声音和InfiniBand驱动,以及......
  • Linux该如何学习,给你支招
    如果你已经确定对Linux产生了兴趣,那么接下来我们介绍一下学习Linux的方法。这只是自己关于学习Linux的建议。一、如何去学习学习大多类似庖丁解牛,对事物的认识一般都是由浅入深、由表及里的过程,循序才能渐进。学习Linux同样要有一定的顺序和方法,当然这也是你学习本教程的意义......
  • 轻松掌握组件启动之MongoDB:快速入门、Linux安装和Docker配置指南
    引言我们将继续深入研究组件启动专题。在之前的文章中,我们已经详细介绍了Redis的各种配置使用方法,为读者提供了全面的指导。然而,今天我们将转向另一个备受关注的数据库——MongoDB。MongoDB是一种流行的NoSQL数据库,具有强大的灵活性和可扩展性。在这篇文章中,我们将探索MongoDB的......
  • OnTheSSH使用技巧(一) 监控Linux性能
     Linux提供了许多命令进行性能监控,如top、netstat、free等,这些命令通常带有很多参数,使用起来需要一定的经验和技巧。OnTheSSH软件提供图表形式的监控,将linux的各种指标聚合在一个界面中,使用起来也非常简单。【打开监控界面途径】1、在左侧栏用鼠标点击某一个远端主机,再点击顶部......
  • LInux无法登录系统时的处理方式
    一:概述在登录系统时,如果从打开电源到登录系统的顺序出了问题,就不会显示登录界面或登录提示信息,即使你在登录界面或登录提示中输入了用户名和密码,也不会登录成功。如果你遇到了这种情况。就没有办法登录系统进行系统的修复工作。解决这种问题就需要从DVD/CD-ROM或SIO镜像中启动安装......
  • Linux(CentOS)之Nginx安装及配置
    一,复制nginx下载链接http://nginx.org/en/download.html二,下载nginx1.注意切换到root用户2.注意在/usr/local/目录下3.使用命令(PS:-c的参数即为上一步你复制的地址)wget-chttp://nginx.org/download/nginx-1.24.0.tar.gz三,解压tar-zxvfnginx-1.40.0.tar.gz四,安装依赖yumi......
  • Linux常见配置文件总结
    /etc/passwd:这个文件包含了系统上的用户账户信息,如用户名、用户ID、用户所属组ID、用户主目录等。/etc/shadow:该文件存储了用户账户的密码哈希值和其他安全相关设置,只有root用户及授权用户可以访问。/etc/group:该文件记录了用户组的信息,包括组名、组ID和组成员。/etc/hosts:这个文件......
  • Linux之防火墙相关
    一,已经打开的端口firewall-cmd--list-all二,打开新端口firewall-cmd--add-port=80/tcp--permanentfirewall-cmd--reload三,临时关闭systemctlstopfirewalld.service四,永久关闭systemctldisablefirewalld.service......
  • Linux 安装jenkins
    安装之前注意jenkins和jdk的版本。2022年7月2日起,jenkins新版本不再支持java8,仅支持java11和java17。安装步骤如下:1、下载jdkhttps://www.oracle.com/java/technologies/downloads/#java17下载安装包:jdk-17_linux-x64_bin.tar.gz下载可能要登陆oracle账号:416863813@qq.com密码......