--------------------------------------------------------------------------------------
!!! 轉載請注明: 轉自http://www.cnblogs.com/jeff-wgc/p/4462182.html !!!
---------------------------------------------------------------------------------------
PC2 配置 & 使用
PC^2官網: http://www.ecs.csus.edu/pc2/ 或 http://pc2.ecs.csus.edu
Author : Yuansheng Xue
From : South China Normal University
Q Q:1348066599
E-mail : xysdavid@gmail.com
E-mail :1348066599@qq.com
下面是以Win7為例(XP也是差不多的)的PC2 v9.2.4 版本的配置方法:
一 安裝 & 配置JDK
由於PC2是基於Java開發的,要用的話就要安裝JDK或JRE.
JDK1.6下載地址:
JDK所有版本下載地址:
http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html?ssSourceSiteId=ocomen
下載后直接安裝就可以了.
然后配置Java的環境變量,右鍵點擊我的電腦->屬性->高級系統設置->環境變量(XP是右鍵點擊我的電腦->屬性->高級->環境變量),在下面的系統變量里面找到path變量,點編輯,在變量值后面添加JDK安裝目錄中的bin目錄的絕對路徑,以我的機子為例,我的JDK的安裝目錄是D:\Java\jdk1.6.0_20,其下有個bin目錄,路徑是D:\Java\jdk1.6.0_20\bin,那么添加JDK路徑后的變量值就是:
然后找到classpath變量(如果沒有的話新建一個),把JDK的lib路徑添加到變量值中,同樣不要忘了分號.
這樣,JDK就配置好啦!
二 解壓安裝PC2
這個……應該不用多講了吧,注意不要解壓到的路徑不要有中文就OK了.
三 編輯pc2v9.ini文件
在PC2的根目錄下有一個pc2v9.ini文件,里面存的是服務器的IP和接入端口,用寫字板打開它(用普通的記事本打開的話看起來可能會很亂),然后我們看到是里面的內容是這樣的:
接下來我們要修改的就是Site 1的server地址和下面remoteSever的地址為服務器的IP地址就可以了,端口不用改.
如果配置服務器的時候不知道本機IP地址的話,可以點開始->運行,輸入cmd,彈出一個黑框,在里面輸入 ipconfig 回車,就會看到很多本機的網絡連接的信息
如上圖所示,IP Address那一行顯示的就是本機的IP地址,填到pc2v9.ini文件,修改后的pc2v9.ini文件內容如下:
這樣, pc2v9.ini文件就配置好了,然后把這個文件復制到PC^2根目錄下的bin文件夾里面(不可以缺少的操作).
配置到這里,就可以供比賽選手使用了.如果是裁判機,還要繼續往下配置.
四 配置編譯器
配置編譯器其實就是配置編譯器的環境變量路徑,和配置Java的環境變量是一樣的,下面以配置codeblocks自帶的GNU C++為例.
在codeblocks的安裝目錄底下的MinGW文件夾里面找到bin和lib文件夾,把
兩個文件夾的絕對路徑按照配置JDK的環境變量一樣,分別添加到path變量和classpath變量里,添加后如圖所示:
這樣,編譯器就配置好了,其他編譯器的配置方式也是類似,把bin文件夾和lib文件夾的路徑分別添加到path變量和classpath變量的變量值里面就可以了.
配置好編譯器之后,結合PC2,就可以做一台裁判機了.
五 配置服務器和比賽
(1) 服務器:
在復制pc2v9.ini到bin文件夾以后,執行bin文件夾里面的pc2reset.bat重置一下(重置后,所有比賽配置都要重新設置,后面會講如何設置比賽配置),然后打開pc2server.bat,就會彈出下圖這樣一個框:
在name和password都輸入默認賬號密碼site1,點Login,然后彈出一個框Enter contest password,這個框貌似填什么都可以,我平時都是填site1的(如果沒有重置的話,要填寫和上次填寫的一樣的密碼).
這樣,服務器就建好了.
(2) 用管理員賬號設置比賽
打開bin文件夾下面的pc2admin.bat,就會彈出一個和前面類似的登陸框,我們用管理員的帳號密碼administrator1登錄,就會看到如下一個窗口:
然后就可以按照下面的步驟配置比賽:
① 配置編譯器
選擇Languages選項卡,如下圖:
點Add,會彈出下面這樣的框:
以配置GNU C++編譯器為例,在Auto Populate with 里選擇GNU C++,會出現如下信息:
如果是linux,到這里可以點Add添加這個編譯器,但如果是windows的話,要在Executable Filename和Program Execution Command Line兩行的信息的后面加上“.exe”,如下圖所示:
然后點Add,就添加了一個GNU C++編譯器了(Microsoft C++的配置也是一樣,不過非正版的VC自帶的MS C++編譯器在配置好之后經常會在比賽中編譯不了代碼,原因不明,所以這里使用GNU C++為例).
如果是配置Java編譯器的話,設置如圖(其實就是默認設置,不用修改)
② 設置題目
選擇Problems選項卡,如圖所示:
點Add添加題目的數據,如圖:
在Problem填寫題目名稱,在Run Timeout Limit填寫題目的限時,以秒為單位;如果這道題是有輸入數據的話,勾選Problem Requeres Input Date,如果要選手們以文件操作的形式讀入數據(要在main函數開頭添加freopen(…)之類的函數才可以讀入數據),則在Team Reads From里選File,如果要標准輸入輸出的話,選Stdin,然后點Input Data File里面的Browse,選擇輸入文件路徑(路徑最好不要有中文,不過PC2 V9好像支持中文,V8的不行),同樣,無論有沒有輸入,絕大多數都是有輸出數據的,所以就要有一個標准的輸出數據文件,用來與選手的輸出作對比,勾選Judges Have Provided Answer File,點Browse這是輸出數據文件路徑,下面以設置a+b為例:
輸入文件內容(a+b.in):
1 1
2 2
輸出文件內容(a+b.out):
2
4
輸入方式是標准輸入輸出,配置后如圖:
對於中間的Judging Type選項卡,是選擇機器自動判題還是人工判題的,默認是人工判題,一般來說都是人工判題,以免機器出現錯誤,所以保持默認不用修改.
點擊Validator選項卡,如圖所示:
這個是選擇輸出數據的比較方式的,會選擇Use PC^2 Validator,然后在Validator Option選項里有5種:
1- diff
選手輸出數據和標准輸出數據若有一點點不一樣,返回結果就是No-Wrong Answer,就算是多了一個空格或者是回車符,都算是不一樣,只有完全一樣的時候才是Yes.
2- ignore whitespace at start of file
忽略輸出文件開頭的所有空格后用1的方式比較.
3- ignore leading whitespace on lines
忽略每一行開頭的所有空格后用1的方式比較.
4- ignore all whitespace on lines
忽略所有空格后用1的方式比較.
5- ignore empty lines
忽略所有空行后用1的方式比較.
在我配置的時候,一般都是選擇第1種方式,然后判題的時候機判為Yes的就直接返回,No的再人工比較一下數據的異同(具體操作會在第七部分講解).
最后,點Add,就添加好一道題了,這樣題目就配置好了.
③ 設置比賽的各種賬號
選擇Account選項卡,如圖:
點Add可以添加賬號,如圖所示:
Account Type可以選擇賬號類型,有Team,Judge和Scoreboard賬號,Team是選手用的賬號,Judge是裁判用的賬號,Scoreboard是用來看排名的賬號(不過一般不用這個看排名,看排名的方式后面會講),最上面的Account指的是比賽的賬號,不過這個不可以由自己填,PC2會根據你設置的序號給你分配賬號,在Display Name里面可以填寫這個賬號在排名里顯示的名稱(一般來說比賽選手的賬號才需要修改這項,也就是比賽隊伍的隊名),password和password confirmation填寫的是密碼和確認密碼(必須一樣),右邊選擇的是賬號的權限,不用管.
下面添加一個裁判賬號示例:
然后點Add就添加了一個裁判賬號,在Account選項卡里面會有顯示:
選中這個賬號,點Edit,可以看到:
之前Account里面沒有顯示信息,現在有了,那個就是登錄用的賬號,如果再定義一個裁判賬號的話,Account就會是judge2,以此類推.
添加比賽隊伍賬號:
這里設置了隊名是super_star,那么在排名board上就會顯示這個名字,同樣,我們點Add,添加這個賬號后,再在Account選項卡中選中這個賬號,點Edit,就會看到:
這個隊伍登錄用的賬號就是team1,第二個設置的隊伍就是team2,以此類推.
添加Scoreboard的賬號也是類似,這里就不多講了.
那如果要批量添加賬號怎么辦?當然是有辦法的,我們可以在Account選項卡中,點Generate,彈出這樣一個框:
我們看到,有Administrators ,Judges ,Teams和Scoreboards,4種賬號括號里面顯示的數字是這種類型已經有的賬號的數量,圖里顯示的有1個管理員賬號,1個裁判賬號,1個隊伍賬號,沒有排名板賬號,如果我們要添加10個隊伍賬號,可以在Teams對應的那行的框里面填10,點Generate Accounts for Site 1,就添加了10個隊伍賬號了,在Account選項卡里可以看到,如圖所示:
選擇不同的賬號,點Edit,就可以看到登錄的賬號名稱和修改Display Name了.
但是,所有隊伍的名字都要一個一個修改的話,工程量很大,有沒有辦法可以一次過修改完呢?答案是,有!
首先要Generate的方式建立好待修改的賬號,然后要有一個txt文件,里面要存有賬號,密碼和顯示名稱的信息,格式如下:
site統一都是1,account就是要修改的賬號,password就是密碼,displayname就是顯示名稱,值得注意的是,整個文件寫好以后,在最后不可以有空行,拿上面那個文件為例,在Team Ten最后就是文件結束,不要有回車符,否則Load的時候就會錯誤.
回到PC2的Account選項卡,點下面的Load,就會彈出窗口選路徑,選擇寫好的存有比賽選手信息的txt文件,選好以后,會彈出一個窗口,顯示的是PC2讀取出來的文件里存的信息,對於上面的文件,讀出來的信息如下:
點Accept ,Account選項卡里面就會顯示:
這樣就配置好了,不過寫那個文件還是需要一點點時間,如果選手報名的時候就把信息以這樣的格式提交上來的話就好辦很多了.
OK,到這里就配置好賬號了.
④ 設置比賽時間
選擇Time選項卡,就看到比賽的時間信息:
選中site1,點Edit,彈出設置時間的小窗口,如下:
Contest Length可以設置比賽的總時間,Elapsed Time可以修改已經過去的時間,Remaining Time可以修改剩余時間, Elapsed Time和Remaining Time填的時間加起來一定要等於Contest Length的時間,否則會提示出錯.勾選Stop clock at end of contest.
點Update就完成設置.
點Start,比賽就開始,選手也可以開始提交代碼了.
六 選手端的使用
打開bin文件夾下的pc2team.bat(打開之前需要將由管理員配置好的pc2v9.ini文件復制到bin文件夾里面),彈出登錄框,參賽隊伍各自填寫屬於自己的帳號密碼登錄,登錄后界面如下:
左上角顯示的是STOPPED,說明比賽還沒有開始,不可以提交,當STOPPED轉為時間的時候,就可以提交代碼了.
提交代碼的時候,先選擇要提交的題目,在Problem里面選擇,然后在Language里選擇語言,然后點Main File里的Select選擇提交的代碼文件,要注意的是,提交的文件的后綴名必須是“.cpp”(Java的話是“.java”),同時,文件名里不可以有空格,否則提交的文件無法編譯,裁判判題的時候將返回No-Compilation Error,如圖:
對於本身存在語法錯誤的代碼也會返回上面的錯誤.
如果出現如下錯誤,則是數組下標溢出或者是遞歸棧溢出:
下面的錯誤就很明顯了,你的代碼輸出的結果是錯誤的:
如果返回的是No - Time-limit Exceeded,說明你的算法可能不夠優,或者出現死循環了.
如果你獲得的是Yes,恭喜你,你的代碼是正確的:
選手端還可以發信息給裁判,詢問裁判一些他們有義務回答的問題,比如題意沒有說清楚的時候,選手可以進行詢問,方法就是,選擇Request Clarification,如圖所示:
如果是針對某題的提問,就在Problem里面選擇題目的名稱,如果不是,就選擇General,然后在Question里面填寫詢問的內容,考慮到PC2對中文的兼容性,建議選手們用英文提問,然后點Submit Clarification,提交給裁判,等待裁判的回復.如果裁判認為選手沒有理解好或者理解錯題意的話,就會出現以下回答:
這就是詢問裁判的方法.
View Runs可以查看自己的提交記錄.
View Clarifications可以查看自己的詢問記錄.
Options 里面可以顯示PC2運行日志,那個東西本人也看不懂,選手們最好也不要亂點.
至於Submit Run選項卡里面的Test功能很少用到,這里也不多講.
選手端的操作就講這么多.
七 裁判端的使用
打開bin文件夾下的pc2judge.bat(打開之前需要將由管理員配置好的pc2v9.ini文件復制到bin文件夾里面),彈出登錄框,輸入裁判各自的帳號密碼登錄,登陸后的界面:
當有隊伍提交代碼的時候,就會是這樣:
從上圖可以看到,有一個隊伍提交了代碼,選擇那個提交,然后點Request Run,彈出如下的框:
點Execute Run,開始編譯執行這份代碼,執行結束或者運行時間已經達到了本題的限時,就會停止,彈出一個框顯示這份代碼輸出的數據,如圖:
這時,點關閉這個框就可以看到機器判的結果,如圖:
如果是Yes的話,就說明和標准輸出文件的數據是一模一樣的,點Accept Validator就可以把這個結果返回給選手.
如果是NO-…的話,點Compare可以和標准輸出文件進行人工比較:
如果數據是和輸出文件一模一樣,只是因為代碼的輸出在最后比標准輸出文件多了一個回車符,裁判可以自行選擇Yes把此代碼判為正確,並返回給選手.自行選擇的方法是,在下圖標記的地方選擇要判定的結果,點Accept Selected確認,並返回給選手.
如果在判題的過程中,出現了某些意外,一些已經判過的提交需要重判,可以選All Runs選項卡, 選中要重判的提交,點Rejudge進行重判,如圖:
裁判的判定就是這樣的.
裁判還有一件工作就是回答選手們的詢問,當有人發送詢問的時候,會有紅色的字顯示在上邊,如圖:
點New Clars,可以查看詢問內容:
下面的白框顯示的就是詢問的內容,在上面的白框選中選手的詢問,點Answer,在下面的白框輸入文字進行回答,如圖:
點OK,就可以發送給詢問的選手,如果裁判覺得這個問題可能大多數選手都會有,可以勾選Send to All teams,再點OK,就可以把這個詢問和回答發送給所有參賽選手,這樣所有選手都可以看到了.如果裁判覺得這個問題裁判沒有義務回答,或者題目已經說明了,選手沒理解,就可以點Default Answer,可以自動回復這句話: NO response, read problem statement,選手就會看到:
這些就是裁判的操作.其他選項卡很少用到,可以忽略.
八 查看排名
如果管理員設置了Scoreboard賬號,就可以打開bin文件夾下的pc2board.bat打開scoreboard的登錄界面(打開之前需要將由管理員配置好的pc2v9.ini文件復制到bin文件夾里面),輸入相應的賬號密碼登錄,登錄后就可以查看排名了,如圖:
其中Solved是指做出的題目數,Points是罰時.
這個排名沒有顯示各題的提交情況,在管理員機子的PC2的bin文件夾下的html文件夾里,有一個summary.html的html文件,打開后就可以看到各題的提交情況和各隊伍的提交情況,如圖:
如果用管理員的機子建立一個http服務器,就可以讓所有選手都看到排名了.
具體操作:
(1) 用服務器工具建立http服務器(本教程里附帶有一個小型的http服務器工具,本工具使用的時候要把IE主頁改為http://www.haha111.com/,否則無法使用).雙擊SimpleHttpSvr.exe打開工具,在狀態欄就會有個小圖標,點擊打開,顯示如圖:
把服務路徑修改為PC2 目錄下的bin\html文件夾,如圖:
然后點擊開始服務,如果服務路徑變成不可以修改的樣子,就說明服務器搭好了,如圖:
再次提醒,如果不把IE主頁改成http://www.haha111.com/的話是無法使用此工具的.
這樣,如果管理員機的ip是192.168.1.100的話,就可以通過這個鏈接http://192.168.1.100:8089/summary.html(注意不要漏了端口8089)
訪問管理員機里的summary.html查看排名了.
以上就是本文檔的所有內容,謝謝閱讀!
如有疑問,可以發郵件到本人郵箱或者直接下面留言評論,雖然我的能力有限,但還是希望能夠幫到你.
--------------------------------------------------------------------------------------
!!! 轉載請注明: 轉自http://www.cnblogs.com/jeff-wgc/p/4462182.html !!!
---------------------------------------------------------------------------------------
謝謝!!!