全文絕大部分轉載自:這篇好文章啊。
致CSP萌新/不會使用NOI LINUX的人群
1:GUIDE
一句話評價:GUIDE就是個辣雞
本意是CCF為了刁難照顧Linux小白而安裝的圖形化IDE,上手比較容易 但是用十五分鍾你就會發現這是什么辣雞
請頭鐵的同學們考場/試機時自行摸索
良言:能不用GUIDE就不用,自帶編譯意義不明,調試會導致IDE崩潰
2:Gedit
原文
一句話評價:如同Notepad++般的存在
Ubuntu自帶的神奇軟件,形似記事本但是比記事本高到哪里去
直接新建一個文件,而后把文件命名為 xxx.cpp
即可
P.S:這里推薦保存在主文件夾(/home/)下,便於編譯操作
Gedit是支持語句高亮的,在右下角可以選擇語言類型 跟Md異曲同工的高亮
總之,是一個體驗良好,很超神的存在
為了尊重作者,以上是原文部分全部保留不動,以下是我的增加部分。
其實 Gedit 是一個很好用的編輯器。(確實比 Windows 下的筆記本好用幾百倍)
但是我認為作者並沒有做過多的介紹,所以決定自己重申一下。
打開
原文是說直接寫 文件名.cpp
但是這樣就沒有辦法進行配置了,所以正解是先保持無名文件,打開后進行配置后再命名。
具體圖片就是醬紫:
在“編輯”中找到“首選項”,然后就可以自己亂搞了。
可以調大字體,自定義代碼高亮,還可以自動縮進 + 顯示行號,反正非常好用就對了。
編譯運行
編譯方法的話,可以看下面 Vim 的編譯方法,用命令行解決就是了。
以上是我的增加部分,下面是原文。
3、Vim
一句話評價:燈光都打起來!最強者出現了!
Vim是(大部分)Ubuntu內置的一個奇妙東西
其實Vim這個東西十分強大,功能比你想象的要多很多,這里只講最最最基礎的操作,如果想要了解詳細,可以移步這里
Vim這個東西有點奇妙,因為它是運行在終端里的 因此也顯得高大上
3-1:這東西咋開啊
方法1:在Linux左上角“搜索我的計算機里”,搜索“Vim”即可,此時會顯示Vim的welcome畫面
方法2:使用Ctrl + Alt + T
打開終端,直接輸入 vi ./xxx.cpp
使用Vim打開文件,此時Vim顯示的是文件內容(如果沒有這個文件,Vim會自動新建一個文件,上面的語句中, vi
表示調用vim, ./
是這個文件的路徑(本文中為Home文件夾), xxx.cpp
是文件名
3-2:這東西咋用啊
使用Vim打開了文件,我們發現此時我們無法對文件進行操作
不要慌,Vim默認開啟時是“命令”模式,是需要輸入指令來操作的
我們按下 i
,切換到插入模式,就可以愉快的寫代碼了
看,和Gedit一樣有語句高光,驚不驚喜
需要注意的是,Vim中的光標只能靠鍵盤上的上下左右鍵和Home/End等鍵移動,不能靠鼠標
寫完代碼了,我們需要保存一下
那么問題來了,怎么保存呢
首先,我們按下 Esc
鍵 (敲ESC三個字母的可以關掉blog直接退役了),返回命令模式
然后,我們在命令模式下輸入 :wq
(均為小寫英文字符),就可以保存文件並直接回到終端啦
語句解釋: :
的作用是一次輸入多條指令,上文中我們未使用":"直接按"i"便是立刻執行命令,這里便會等待你一次輸入全部命令回車后依次執行; w
是Vim的保存命令 (不是s嗎) ; q
是退出指令
4、編譯與運行
代碼寫完了,接下來我們就是要來運行了
編譯運行其實也很簡單,本質上跟dev C++是一樣的
以上文代碼為例,首先按下 Ctrl + Alt + T
召喚出 終端,在終端里敲下
gcc ./xxx.cpp -o ./xxx -g
即可編譯完成
如果gcc頻繁編譯失敗,又找不出問題,可以嘗試把 gcc
換成 g++
語句解釋:"gcc"是調用gcc編譯器(類似vi語句), ./xxx.cpp
是上文代碼的路徑, -o
是向gcc傳遞編譯指令(平時你用的Dev C++里編譯也是這一步只是加上了各種后綴,另外注意一定要加上那個"-"號),./xxx
是編譯過的可執行程序的輸出路徑(這個記好一會運行要用,同樣建議生成至Home文件夾), -g
是后綴,表示生成調試信息,OI中常用的后綴大概只有 -O2
(吸氧), -Wall
(顯示警告信息)和 -g
了,如果你不使用GDB調試程序,可以不添加這個后綴
運行更加簡單了,在終端里直接輸入
./xxx
即可運行程序,前面什么都不用加,然后我們就可以運行程序,程序的輸入輸出和你平時在Windows下使用cmd運行是一模一樣的,當然,也可以重定向到文件
數據:P1908樣例
筆者的程序有使用fread的快讀,必須使用文件讀入所以出鍋了
假裝有輸出
順便教給大家,圖片里的^C就是 Ctrl + C
,意義為強行kill終端當前運行的任務,故在使用終端測試時一定要手打數據或右鍵粘貼,千萬不要Ctrl C 再 Ctrl V 結果練程序怎么死的都不知道,終端跟cmd一樣不支持 Ctrl + V
粘貼,想要在終端內進行復制粘貼操作,可以使用 Ctrl + Shift + C
, Ctrl + Shift + V
操作
5、調試
太菜了不會GDB
想學GDB可以參考這里
還有感謝 Ancker-0 Dalao 推薦的這里
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鏡像下載地址。
完結撒花。