~對拍~
一般的刷題時間,機房裡的dalao們用來檢查**的方式還是會以手造
毒瘤資料為主,手造資料更方便完全回顧**,且規模一般較小,除錯起來也容易。美中不足的是較小範圍的資料很可能觸及不到資料的邊界,以致該發現的問題沒發現,交到oj測評姬上被毒瘤資料反手一槍秒了。
對拍是一種全自動的驗證程式。首先,你需要乙個std和乙個暴力解法。一段合格的std應該具有如下特點:思路正確,複雜度比暴力優,能編譯過去(大霧,小規模資料(比如樣例或者某些手造資料)可以輕鬆通過並合乎標準。而你的暴力解法則需要有以下特點:真的暴力,複雜度比std低一些,完全保證的正確性(暴力都寫不對還想要部分分?),能夠盡快處理大規模資料(看似矛盾,但其實只要能在截止前提交就行,對拍所用的時間簡直不值一提)。
當然,有了標程,就不能缺少資料生成器,不然再nb的std也排不上用場。資料生成器所生成的資料應該盡可能的,完全的隨機(windows的偽隨機數真是讓人淚目,linux環境下則要好很多),而且永遠永遠要合乎題意,當你生成一堆錯誤的資料去對拍,結果可想而知。
對拍的基本流程就是先用乙個輸入來獲得std和暴力的兩組輸出,判斷這兩組輸出是否完全相同,如果完全相同,哦那沒事了,下一組。如果兩者有地方不一樣(不是那些空格啊換行之類零碎而無關緊要的東西),那說明肯定是std出了問題(暴力保證正確的情況下)。如果無法保證暴力演算法的正確性,那麼可以對小規模資料進行手動模擬,對大規模資料進行估算等等操作,方便我們找出哪個演算法是內鬼(也許兩個都是內鬼也不一定(大霧。
那我們搞個板子來看一下
如果你喜歡寫.bat檔案
那可以這麼寫
@echo off:loop
makedata.exe
std.exe
baoli.exe
fc std.
out baoli.out
if not errorlevel 1
goto
loop
pause
:end
平時這樣寫倒是無傷大雅,但問題是考試的時候用的是linux...
於是乎我們可以使用另一種方法
用c++編譯乙個對拍檔案並執行
#include #include#include
#include
using
namespace
std;
intmain()
else
}}
對拍的流程和方式基本如此,感覺這麼簡單的玩意也沒啥好說的
哎對...對拍是用來造資料的(大霧
常見C 知識點
1 非c 內建型別 a 和 b,在哪幾種情況下b能隱式轉化為a?a.class b public a b公有繼承自a,可以是間接繼承的 b.class b b實現了隱式轉化為a的轉化 c.class a a實現了non explicit的引數為b 可以有其他帶預設值的引數 建構函式 d.a oper...
C 知識點複習
static static變數只能初始化一次 include include using namespace std void fun int i int main 輸出為 0 00因為static變數只初始化一次,static int value i這句話只執行一次,也就是fun 0 的時候執行。...
C 知識點備忘
關鍵字 explicit不允許隱式的轉化 參考 例如 class string下面兩種寫法編譯通過,是正常的初始化方式 string s2 10 ok 分配10個位元組的空字串 string s3 string 10 ok 分配10個位元組的空字串以下宣告方式為隱式的宣告方式 string s4 1...