致CSP萌新/不会使用NOI LINUX的人群
权御天下
2019-11-14 23:16:28
### csp快要到来了,个别小伙伴依旧不会&首次使用Linux系统,这篇文章即是面向这类人群
## 进入正题:
~~先卖个萌~~
---
1:GUIDE
--
### 一句话评价:~~GUIDE就是个辣鸡!~~
本意是CCF为了~~刁难~~照顾Linux小白而安装的图形化IDE,上手比较容易 ~~但是用十五分钟你就会发现这是什么辣鸡~~
由于权御天下自己的Ubuntu没装这个辣鸡软件所以不提供使用教程
~~请头铁的同学们考场/试机时自行摸索~~
良言:能不用GUIDE就不用,自带编译意义不明,调试会导致IDE崩溃
---
2:Gedit
--
### 一句话评价:如同Notepad++般的存在
Ubuntu自带的神奇软件,形似记事本但是比记事本高到哪里去
直接新建一个文件,而后把文件命名为 `xxx.cpp` 即可
P.S:这里推荐保存在主文件夹(/home/)下,便于编译操作
![图片1](https://i.loli.net/2019/11/14/Ex8pmcDAWHnl5Qi.png)
Gedit是支持语句高亮的,在右下角可以选择语言类型 ~~跟Md异曲同工的高亮~~
![图片2](https://i.loli.net/2019/11/14/bFAX2SyG73ZMEP4.png)
~~代码:[P1908题解](https://www.luogu.org/blog/twi/post-ti-xie-p1908-ni-xu-dui-gui-bing-pai-xu-qiu-ni-xu-dui-hu)~~
总之,是一个体验良好,很超神的存在
---
3、Vim
--
### 一句话评价:灯光都打起来!最强者出现了!
Vim是(大部分)Ubuntu内置的一个奇妙东西
其实Vim这个东西十分强大,功能比你想象的要多很多,这里只讲最最最基础的操作,如果想要了解详细,可以移步[这里](https://www.luogu.org/blog/Tiger3018/vim-basic-learning)
Vim这个东西有点奇妙,因为它是运行在终端里的 ~~因此也显得高大上~~
### 3-1:这东西咋开啊
方法1:在Linux左上角“搜索我的计算机里”,搜索“Vim”即可,此时会显示Vim的welcome画面
![图片3](https://i.loli.net/2019/11/14/GFS8Tk1tKcAod5w.png)
![图片4](https://i.loli.net/2019/11/14/Spt5KHaRs9A6iGc.png)
方法2:使用`Ctrl + Alt + T` 打开终端,直接输入 `vi ./xxx.cpp` 使用Vim打开文件,此时Vim显示的是文件内容(如果没有这个文件,Vim会自动新建一个文件,上面的语句中, `vi` 表示调用vim, `./` 是这个文件的路径(本文中为Home文件夹), `xxx.cpp` 是文件名
![图片5](https://i.loli.net/2019/11/14/X3ZlAErgjF9N2Im.png)
![图片6](https://i.loli.net/2019/11/14/KZDHUVuAIcF1Ov5.png)
### 3-2:这东西咋用啊
使用Vim打开了文件,我们发现此时我们无法对文件进行操作
不要慌,Vim默认开启时是“命令”模式,是需要输入指令来操作的
我们按下 `i` ,切换到插入模式,就可以愉快的写代码了
![图片7](https://i.loli.net/2019/11/14/OzKC7FVHqIETAwb.png)
~~代码:[P1908题解](https://www.luogu.org/blog/twi/post-ti-xie-p1908-ni-xu-dui-gui-bing-pai-xu-qiu-ni-xu-dui-hu)~~
~~看,和Gedit一样有语句高光,惊不惊喜~~
需要注意的是,Vim中的光标只能靠键盘上的上下左右键和Home/End等键移动,不能靠鼠标
写完代码了,我们需要保存一下
那么问题来了,怎么保存呢
首先,我们按下 `Esc` 键 ~~(敲ESC三个字母的可以关掉blog直接退役了)~~,返回命令模式
然后,我们在命令模式下输入 `:wq` (均为小写英文字符),就可以保存文件并直接回到终端啦
![图片8](https://i.loli.net/2019/11/14/OYW5zw2PiXkBFQ4.png)
![图片9](https://i.loli.net/2019/11/14/eH2WrIwKqOEaPMd.png)
语句解释: `:` 的作用是一次输入多条指令,上文中我们未使用":"直接按"i"便是立刻执行命令,这里便会等待你一次输入全部命令回车后依次执行; `w` 是Vim的保存命令 ~~(不是s吗)~~ ; `q` 是退出指令
---
4、编译与运行
--
代码写完了,接下来我们就是要来运行了
编译运行其实也很简单,本质上跟dev C++是一样的
以上文代码为例,首先按下 `Ctrl + Alt + T` ~~召唤出~~ 终端,在终端里敲下
`gcc ./xxx.cpp -o ./xxx -g` 即可编译完成
如果gcc频繁编译失败,又找不出问题,可以尝试把 `gcc` 换成 `g++`
![图片10](https://i.loli.net/2019/11/14/hDbBJ4rQfLjpv9o.png)
语句解释:"gcc"是调用gcc编译器(类似vi语句), `./xxx.cpp` 是上文代码的路径, `-o` 是向gcc传递编译指令(平时你用的Dev C++里编译也是这一步只是加上了各种后缀,另外注意一定要加上那个"-"号),` ./xxx` 是编译过的可执行程序的输出路径(这个记好一会运行要用,同样建议生成至Home文件夹), `-g` 是后缀,表示生成调试信息,OI中常用的后缀大概只有 `-O2` (吸氧), `-Wall` (显示警告信息)和 `-g` 了,如果你不使用GDB调试程序,可以不添加这个后缀
运行更加简单了,在终端里直接输入
`./xxx` 即可运行程序,前面什么都不用加,然后我们就可以运行程序,程序的输入输出和你平时在Windows下使用cmd运行是一模一样的,当然,也可以重定向到文件
![图片11](https://i.loli.net/2019/11/14/sCLtmITFdlfhWDK.png)
数据:[P1908样例](https://www.luogu.org/problem/P1908)
~~笔者的程序有使用fread的快读,必须使用文件读入所以出锅了~~
~~假装有输出~~
顺便教给大家,图片里的^C就是 `Ctrl + C` ,意义为强行kill终端当前运行的任务,故在使用终端测试时一定要手打数据或右键粘贴,千万不要Ctrl C 再 Ctrl V ~~结果练程序怎么死的都不知道~~,终端跟cmd一样不支持 `Ctrl + V` 粘贴,想要在终端内进行复制粘贴操作,可以使用 `Ctrl + Shift + C` , `Ctrl + Shift + V` 操作
---
5、调试
--
权御天下考场一般只会用输出中间变量调试法
~~太菜了不会GDB~~
想学GDB可以参考[这里](https://blog.csdn.net/zdy0_2004/article/details/80102076)
---
6、CSP竞赛中编写代码的经常性注意事项
--
### 由于CSP的评测是在Linux的环境下完成的,因此有一些注意事项需要注意:
1、尽量不要使用 `gets()` 语句读取一行,因为这些函数使用换行符来判断行结束,Windows下换行是\r\n,而Linux下换行是\n,假设某题的数据是在Windows下生成的,那么这道题的换行符就是\r\n,最终比赛时的代码是在Linux下编译的,读取的换行符是\n,这样就会导致读入错误
> kkksc03评论:其实不使用gets()的原因主要还是潜在的溢出风险。
2、评测环境为Linux64位,因此请注意指针变量占用的空间是 `8` 字节,注意计算内存,避免MLE
3、在使用`long long` 型int时请记得使用 `%lld` 而非WIndows下的%I64d
4、忌使用 `__` (双下划线)开头的函数如pbds,CSP是禁止此类函数的使用的,使用此类函数可能导致你的代码CE或取消题目成绩
---
7、总结
--
总结一下CSP考试中最常用的计算机指令(排名不分先后)
```
Ctrl + Alt + T //开启终端
```
---
```
Ctrl + C //强行kill当前运行的任务(终端内适用)
```
---
```
vi ./xxx.cpp //使用Vim打开或创建文件(终端内适用)
---^^^^^^^^^
路径
```
---
```
Vim内:
i //写入模式
Esc //返回命令模式
: //依次执行多条命令
w //保存
q //退出
(终端运行Vim时适用)
```
---
```
gcc ./xxx.cpp -o ./xxx //编译程序(终端内适用)
----^^^^^^^^^----^^^^^
输入路径 输出路径
```
---
```
./xxx //运行程序(终端内适用)
^^^^^
程序路径
```
### ex1:如果运行程序时提示权限不足,请尝试在运行语句前加sudo
### ex2:NOI Linux默认用户为noilinux,密码为123456
## ex3:[NOI Linux镜像下载地址](http://www.noi.cn/newsview.html?id=690&hash=9A0662&type=11)