NOI Linux 2.0 CSP奥赛复赛环境安装使用指南

news2024/11/27 21:06:40

新人旧人区别

以下是可能导致你在老版 NOI Linux 系统下形成的习惯在新版下翻车的改动。

  • 移除了 GUIDE
  • 从 32bit 变为了 64bit 系统,需要注意指针现在占 8 字节而不是 4 字节
  • 更新了编译器版本
  • 默认情况下右键没了【新建文件】的选项
  • 桌面目录改为中文,可能会导致一些程序无法运行

主要变化

  • 系统基于了 Ubuntu 20.04 (64bit)
  • g++ 升级到了 9.3.0
  • 添加了很多编辑器,例如 Sublime,VSCode,Code::Blocks

安装

和旧版无区别,主要就是官网上说了安装时要断网,可以通过在虚拟机软件安装时把虚拟网卡断开的方式。

Edit:现在已使用了该系统进行了CSP和NOIp,是否联网更新因考场而异,NOI时如何实施尚不清楚。若可以联网更新,强烈推荐使用VSCode并安装C/C++插件进行编程

中文目录

这个系统如果选择中文安装,桌面这个目录会是中文的。

然后这带来了很多问题,一是你在终端里敲很麻烦,二是有些程序可能用不了。

请不要在桌面上建立文件编程,以避免不必要的麻烦,据我测试,已知 Code::Blocks和 Gedit 的编译是会出问题的。

右键菜单新建文件

如果需要的话,可以终端里输入

xdg-user-dirs-update --set TEMPLATES ~/Templates/
touch ~/Templates/newfile

即可。

然后重启文件管理器(可以终端输入 killall nautilus)然后你就会发现右键菜单里【新建文件】回来了。

壁纸

默认壁纸是一张极丑无比的纯黑壁纸?没关系,可以进入【设置——背景】更换。

有趣味壁纸,比如这个:

编辑器

说一句题外话,我很喜欢 GUIDE,很不理解为啥会删掉它,可能它在很多地方令人难受,但是它可以对于每个文件单独设置编译选项,且不需要额外配置,对于我这种对于一个代码经常更换编译选项的选手真的是很好用。

一般上来讲,我认为考场上不应花费超过 5 分钟来配置编辑环境。尤其是像 NOI 这种比赛,开考前不可以动键盘,不可以登录系统,所以任何配置这些东西的时间都会占用你的有效比赛时间,我这里推荐使用一个可以较快速配置完成,且不明显拖累编码效率的即可。所以我这里不介绍需要大量配置的使用方式。

还有我觉得这些编辑器默认字体都挺好看的,如果觉得不好看的可以自行查找一下修改字体的方式。

另外,下列编辑器中有一些打开大文件的时候会卡死,请做好测试,避免在未保存代码时打开过大的样例,以免数据丢失

若真正卡死了,这个版本的 ubuntu 会在足够长的时间后弹出未响应提示,大多数情况应该不用手动 killall 了,当然如果你没有听劝,里面还有未保存的代码,那只能多等个几分钟,看看能不能恢复,然后赶紧保存 ,再不行就彻底寄了。

VSCode

很不幸的是,CCF 提供的 VSCode C/C++ 插件是一个在线安装版本,真实竞赛中完全没法用,所以...听说你想要超好用的 VSCode?没门的啦!

虽然这么说,但没有 Intellisense 和 Debug 的 VSCode 也是可以用的,虽然编译需要手动去命令行里敲,调试也要命令行 gdb,但论语法高亮和自动缩进和括号补全这方面还是可以的。

当然你也可以手写JSON实现一个编译运行指令,具体我就不细说了,还蛮复杂的,网上搜一下即可。

设置里也可以捣鼓一堆东西,比较有用的有自动保存【Auto Save】。

值得一题的是它内置的查找功能挺好用的,在查变量重名的时候很有效。右边三个开关分别代表是否区分大小写,是否强制搜索单词(两边都有空白字符),以及是否启用正则。

基本上常规使用方法就是像这样,用自带的终端编译运行所有文件的样子。

优点

  • 有着简单的语法高亮,编辑体验好
  • 有自带的文件管理器,可以方便的新建文件
  • 几乎不需要设置
  • 自带终端

缺点

  • 不自带编译功能,若实现需要手写JSON
  • 不自带调试功能

Sublime Text

感觉和 VSCode 体验差不多?不过自带一手单文件编译指令。但我没咋用过,所以不多评价。

但感觉真的和 VSCode 差不多啦,要自定义编译也必须手写JSON。

优点

  • 有着简单的语法高亮,编辑体验好
  • 几乎不需要设置

缺点

  • 修改编译选项需要手写JSON
  • 不自带调试功能

Geany

Geany 基本上开箱即用,但有一些我认为很好用的插件可以开。

【工具-插件管理器】里面可以打开插件

一些好用的有:

  • 【Auto-close】括号补全
  • 【Auto-mark】符号高亮

F9 编译 ,F5 运行,运行会弹出一个终端,注意没有编译+运行,需要连按两个。

在 【生成-设置生成命令】里面可以设编译选项。

不过有个比较毒瘤的事情就是这玩意 Warning 和 Error 的显示一样,注意看一看。

然后那个下面那个写着编译器的那一栏的上下箭头是可以点的,点到最下面有个自带终端。也可以把下面那一栏拉长全部显示出来。

优点

  • 有着简单的语法高亮,编辑体验好
  • 几乎不需要设置
  • 自带终端

缺点

  • 不自带调试功能

Code::Blocks

因为这玩意貌似是自带调试的所以重点研究了一下

首先如果打开单文件只有默认编译选项,无法调试,所以不可避免的需要新建一个项目文件。

先选择 【File-New-Project-Console Application】建立一个新项目,然后title选择题目的名称,然后 Folder 选择你这个比赛规定的存放该题的文件夹的父目录,其它的一路默认下去。

然后你就有了一个项目。首先你会发现它给你创建了个 main.cpp,因为 OI 比赛中一般需要一个固定的名字才能正确收上去,所以需要改名字。首先先把这个文件关掉。然后在左边右键这个文件,选择【Rename File...】,改成该题目的名称。

然后,基本的配置就搞好了。

接下来就是如何设置编译选项,这次在左边右键这个项目的图标,然后点【Properties...】。

然后点进【Build Targets】,这个页面里的 【Build options...】点开即可,可以分别为【Debug】和【Release】设置编译选项,而这两个东西可以理解为两个模式,比赛时可以用【Debug】作为开了类似 -g 的选项用于查错的那个,而【Release】开题面所示的编译选项,反应真实效果。(当然也可以根据需求用左边的 【Add】加入更多模式。)

当然那些给出的选项并不一定需要用它,可以用下一栏的【Other Compiler Options】直接写也是可以的。

那么现在已经配置好了,你可以在顶上的选项框里切换编译模式,然后可以按那个黄齿轮绿箭头分别代表编译,运行,编译运行。

然后右边的那个红箭头可以开始调试,调试时可以点调试框右边这个电脑上有个虫子的图标中的【Watches】打开变量查看。注意调试时必须开 -g 编译哦(【Debug】模式编译)

总之具体使用方式还是蛮复杂的,毕竟这是一个庞大的IDE,大家可以自行摸索。

当然,你也可以只拿它调试,就新建一个工程然后就不改其它设置,有需要的时候把代码复制进来调,这也是可以的。总之这似乎是唯一一个可以拿来调试的。

优点

  • 自带调试功能
  • 有着简单的语法高亮,编辑体验还行

缺点

  • 自动缩进可能有点怪(?)
  • 配置麻烦,必须配置一个项目才可以。比较笨重。

其它

Vim 和 gedit(现在就叫文本编辑器)还有 Emacs 还在,喜欢用的继续用就好了,应该没有太多改变。

总结

提供了 VSCode 却不提供可以正常使用的 VSCode C/C++ 插件。

编译器

编译器升级到了 g++ 9.3.0 可以整啥花活呢?

强大的 sanitizer

编译选项加入 -fsanitize=address,undefined 可以体验绝佳的查 RE,查 UB 的体验。

当然如果编译器和链接器分开需要在链接器里加上 -lasan -lubsan 才可以用(指 Code::Blocks)

可以实现:数组越界直接 RE,有符号整数溢出直接 RE,返回值不为 void 的函数不 return 就返回直接 RE...总之就是可以查 RE 和 UB,且能告诉你错在了第几行 。相信我,会上瘾的。

优化

编译器优化更聪明了,虽然可能感知不强

C++14/17

应该以后正式比赛能用上?

Edit:已确认:以后会用C++14

Arbiter

arbiter 好像更新了?让我看看有啥区别。

内存限制最大值从 512MB 变到了 2048MB。不过这个好像似乎已经内部被修改过了(参见之前 NOI 里面都有 1GB 的空间限制)?

好像还改了改图标。

所以似乎并没有区别。

终端命令

基本没变,常用的能用的都用。不能用的也不能用,除了...

ssh

喜闻乐见.jpg

其实 ssh 命令并没有被删,只不过 ssh 服务不开放,也就是你还可以 ssh 其它系统,但这个系统不能被 ssh 到了。

试着给虚拟机和实体机开一个网络测试了一下,不太行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/793642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【3519AV200】AI算法承载硬件平台_双目IMX334视频通道接入硬件方案开发

Hi3519AV200内置四核A55,提供高效且丰富和灵活的CPU资源,以满足客户计算和控制需求。集成单核MCU,以满足某些低延时要求较高场景。 Hi3519AV200集成了高效的神经网络推理单元,支持2.5Tops INT8 ,并支持业界主流的神经网…

【监控系统】可视化工具Grafana简介及容器化部署实战

1.什么是Grafana 官网地址:https://grafana.com/ Grafana用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。支持快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中…

【MySQL】索引与B+树

【MySQL】索引与B树 索引概念前导硬件软件方面 索引的理解单个page多个page引入B树B树的特征为什么B树做索引优于其他数据结构?聚簇索引与非聚簇索引辅助索引 索引的创建主键索引的创建和查看唯一键索引的创建和查看普通索引的创建和查看复合索引全文索引索引的其他…

2.java语法

文章目录 2.1. 字符型常量和字符串常量的区别?2.2. 关于注释?2.3. 标识符和关键字的区别是什么?2.4. Java 中有哪些常见的关键字? 2.5. 自增自减运算符2.6. continue、break、和 return 的区别是什么? 2.1. 字符型常量和字符串常…

Java编译器中的优化技术

一、JIT技术 Java中的热点代码主要有两类,包括:1、被多次调用的方法。 2、被多次执行的循环体。 前者很好理解,一个方法被调用得多了,方法体内代码执行的次数自然就多,它成为 “ 热点代 码 ” 是理所当然的。而后者则…

《零基础入门学习Python》第068讲:GUI的终极选择:Tkinter5

这节课的主要内容为 Listbox 组件、Scrollbar 组件 和 Scale 组件 在之前的学习中,我们已经知道了,如果说提供选项给客户选择,那么有两种情况,单选的话,我们用 Radiobutton,多选的话,用Checkb…

笔记本电源适配器使用时发烫会有安全隐患吗?

笔记本电源适配器(充电器) 笔记本充电器内部是一个很大的电感结构,因其工作原理会产生一部分热能,所以部分发热是正常的,即使发热也会一直保持一定的温度。同时,充电器外壳都是耐高温的不会烧坏&#xff…

【MySQL】索引是什么东东?

书中的目录,就是充当索引的角色,方便我们快速查找书中的内容,所以索引是以空间换时间的设计思想。 索引和数据位于存储引擎中,MySQL默认的存储引擎是InnoDB。 1 为什么MySQL采用B树作为索引? 1.1 其他数据结构为什么…

C语言每日一题:6.移除元素+合并两个有序数组。

第一题:移除元素 思路一: 一:暴力查找的方法: 1.找到对应val值的下标,返回数组的下标。 2.删除对应的下标,从前向后用后面覆盖前面。当后一个是数组最后一个数值是就赋值结束了(注意数组越界的问…

【C++】开源:grpc远程过程调用(RPC)配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍grpc远程过程调用(RPC)配置与使用。 无专精则不能成,无涉猎则不能通。。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜…

TikTok广告数据不好?收下这份常见问题自查手册!

你是一位跨境卖家吗?你是否在TikTok上投放过广告? 如果你的答案是肯定的,那么你可能遇到过一些困扰。比如,你的广告为什么不起量?为什么突然掉量了?为什么成本上升了?到底是哪里出了问题&#…

【MyBatis 学习三】子段不一致问题 多表查询 动态SQL

目录 一、解决Java实体类属性与数据库表字段不一致问题 🌷现象1:显示字段不对应:使用ResultType查询结果为null; 🌷解决办法:字段不对应:使用ResultMap解决。 二、数据库的多表查询 &#…

【【51单片机的红外遥控】】

红外遥控,完全把控 红外遥控 利用红外光进行通信的设备,由红外LED将调制后的信号发出,再由专门的红外接收头进行解调输出 通信方式:单工 异步 红外LED波长:940nm 通信协议标准:NEC标准 用那种一体化红红外…

面试总结-Redis篇章(八)——Redis分布式锁

JAVA 面试总结-Redis分布式锁 模拟抢券场景 通过下面方法添加Synchronized锁来防止上述情况,如果上面是单体服务没有问题,但是如果项目是集群部署,会出现下面的问题,因为Synchronized是属于本地的锁端口8080和8081同时访问&#x…

抽象工厂模式——产品族的创建

1、简介 1.1、简介 抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品 1.2、定义 抽象工厂模式(Abstract Factory Pattern):提供…

【MySQL】SQL优化(九)

🚗MySQL学习第九站~ 🚩本文已收录至专栏:MySQL通关路 ❤️文末附全文思维导图,感谢各位点赞收藏支持~ 一.插入数据 (1) 小规模数据 如果我们需要一次性往数据库表中插入多条记录: -- 例如我们需要插入大量数据 insert into t…

3.安装kubesphere

1.本地存储动态 PVC # 在所有节点安装 iSCSI 协议客户端(OpenEBS 需要该协议提供存储支持) yum install iscsi-initiator-utils -y # 设置开机启动 systemctl enable --now iscsid # 启动服务 systemctl start iscsid # 查看服务状态 systemctl status …

第三大的数

414、第三大的数 class Solution {public int thirdMax(int[] nums) {Arrays.sort(nums);int tempnums[0];int ansnums[0];int count 0;// if(nums.length<3){// return nums[nums.length-1];// }// else {for(int inums.length-1;i>0;i--){if (nums[i]>nums[i…

如何提高自己的软件测试水平之bug定位

同学们在面试投简历的时候会经常看到人家公司JD上写的要求之一&#xff0c;如下&#xff1a; 这句话大家不要以为随便写写的&#xff0c;在我工作的十几年过程中起码见过10个以上试用期没过的公司新人&#xff0c;公司在衡量一个测试工程师是否专业的标准之一就是&#xff1a;…

常用的数据结构 JAVA

目录 1、线性表2、栈&#xff1a;3、队列&#xff1a; 1、线性表 List<Object> narnat new ArrayList<>();ArrayList&#xff1a;动态数组 1、可以嵌套使用 2、add(x)添加元素x&#xff0c;remove(index)删除某个位置的元素 3、注意list是指向性的&#xff0c…