剛換完Linux,趁着教練給的改題時間(T2確實猛)自己上網找了好多博客,發現很多跟競賽有關的內容是碎片化的,從最基本的如何用vim寫代碼、編譯、運行,再到怎么改設置使打代碼時手感強一些,最后學對拍,用了小半天,總結一下。
基本操作:
vim的大部分操作需要在終端上進行,說白了就是在終端上寫代碼(盡管這種說法可能不甚嚴謹),下面介紹比賽時的基本操作,圖文均有。
1、打開終端。
同時按下Alt、Ctrl以及t。
2、一些輔助操作:
1>查看list(簡單理解就是文件(夾)目錄), 在終端輸入指令 ls
可以幫我們看看我們是否成功新建文件夾。
2>創建文件夾,在終端輸入指令mkdir+文件夾名
競賽時有的比賽是不給選手提前建好文件夾的,自己建唄,而且可以把一些碼塊(對拍的一套)裝在一起。
3>進入文件夾,在終端輸入指令 cd+文件夾名
然后由於我們初學,我們會很擔心自己的操作是否成功,所以我們可以去點擊左上角“應用程序”->"文件"->"Yushi",如圖:
另外,由於博主的linux沒有多少插件(也許是這個原因吧),博主無法在vim中把代碼復制出來,所以,我們打完代碼交oj的時候,就可以從這里直接打開文件進行復制,如果讀者感興趣以及有條件,那么請自己去查詢資料,學習指令,嘗試在vim中把信息直接提取出來,請諒解。
3、開啟代碼之旅
首先打開vim,在終端中輸入vim xx.cpp,如圖:
進入后發現什么都干不了,不急,按一下i,進入插入模式,如圖:
然后打一手a+b problem(此時你的手感應該不太好)
看到左下角的“wq”了嗎?意思是保存並退出,首先按下“Esc"退出插入模式,然后按下“:”,輸入“wq”即可,另外“w“是保存,”q"是退出,讀者可以自行嘗試一些命令,畢竟探索也是競賽的一部分,雖然有些費時間。
然后我們看一下文件夾:
這樣就可以點開復制啦(略心塞)。
然后編譯,在終端輸入g++(編譯語言)xx.cpp(剛寫的代碼)-o(記住就完事了)xx(一般這么打,比較符合習慣,具體原理不講),如圖:
編譯失敗,則在終端輸出錯誤信息,否則成功,看一眼文件夾:
那個小齒輪看來跟exe文件有些相似(也許吧)。
接着運行,輸入./xx(xx就是你剛建的那個齒輪),如圖:
輸入樣例(不要在意上面的那一堆,a+b打錯了……)
好了成功,去文件夾打開文件上交oj,應該能A吧(有點虛,沒long long)。
修改設置
接着來講一下怎么提高手感,首先強調一下,平時練習時就盡量別安裝插件,因為你不知道比賽時的配置,記一些簡單的命令即可,沒必要改的異常華麗。另外經過博主測試,當你把上一次的代碼粘進來(復制不行粘貼竟然可以,有些出乎意料),如果你有以下的修改操作,那么后果就是代碼錯行,非常難受,讀者可以自己去嘗試一下。以下的設置僅供參考,更詳細的命令可以查閱資料,博主進給出一些自己明白是什么意思的命令,別的好命令再去嘗試吧。(一定記住先粘進來再該設置)。
首先打開vimrc,具體操作如下(我也不懂為什么)在終端輸入vim ~/. vimrc,注意“/”和“.”一定別打反,如圖:
然后打上如下代碼(注意圖文不符):
set nu //不要打這些注釋……//顯示行號 set mouse=a //鼠標使用 set tabstop=2 //tab縮進為2(不嚴謹) imap [ []<ESC>i //把[映射為[] imap ( ()<ESC>i //同上 imap { {}<ESC>i imap " ""<ESC>i imap ' ''<ESC>i
wq保存,然后再打代碼時就比較舒服了,推薦提前在自己的博客等位置復制一份,直接粘(當然你有硬盤保護的話)。
autoindent和smartindent是自動/智能縮進,重新打代碼時加上比較好,復制進vim時不要有(有解決辦法請留言解決補充)。
還有一種操作,在vim打代碼時,在普通模式(就是沒進插入模式之前)輸入:set autoindent這類操作也是可以的,但是等你wq后再進來,就沒有了(反正我是這個情況),所以長時間訓練還是vimrc好。
對拍
首先,請確保在閱讀下面文字之前學會如何在windows系統下進行對拍,最基礎的fc,system,rand等一定要會。沒有基礎的讀者,請移步別的博客,博主目前沒有寫對拍的想法,在此抱歉。
1、寫出正確的解法(一般純暴力)(這里用std表示),如圖:
2、寫出自己的解法(用vio表示)(感覺有些奇怪,讀者自己去改名吧,隨自己喜好),如圖:
3、根據題意寫數據生成器(用rand表示),如圖:
4、對拍的運行程序,讀者可以根據自己的需要去添加諸如運行時間(ctime,clock),測試點數等,這里僅給出普通的Ac,Wa0。請仔細閱讀下圖,看一看linux對拍與windows對拍的區別:
首先運行程序需要“./”,閱讀完上文,讀者應該可以理解。剩下的就是把fc->diff,還是,比對相同時返回0。
在運行上圖代碼片之前,要對所有的子程序進行編譯,在程序旁邊的文件夾背景中已經給出示范(編譯錯名字一定要及時改,其實挺坑的)。
然后./pair運行一下。
對拍成功。
linux再新奇也僅僅是一種系統,並不是競賽研究的方向,只要學會基礎操作和對拍方式就足夠,沒有必要花時間去弄一些毫無價值(最起碼當前來說是的)的東西。希望對讀者有些許幫助。