简单的对拍
在算法競賽中,我們常用對拍來初步檢驗程序。
網上也有其它的關于對拍的教程,但是任性的我還是要自己寫一篇教程。
?
首先,我們要知道我們是用一個叫做” 批處理文件(.bat)“的東西來處理這個問題。點擊初步了解bat
不過不必深究這個,因為我們只用其中一小部分。
那么,我的基本思路是:
①先得到測試數據及答案(可用符合題意的隨機數程序);
②打開標準程序(或你的暴力程序)和你的程序并生成答案;
③比較文件,一致則循環比較,否則輸出文件不同點;
當然,你可以添加一些功能,如:綜合時間和正確率給程序評分等(我就懶得寫了)。
先用一個例子來示范一下
就用2016年noip第一天的第一題,?點擊查看題目
接著寫我們的bat文件了(建議比賽開場前時寫)
實所謂的批處理文件,就是把DOS命令先寫下來。所以,就用記事本寫就行,然后后綴改成.bat。點擊了解怎么改后綴
我寫的bat:
@echo off ::關回顯,不必深究 :sign ::標識符,與C語言的用法大致一樣rand ::一個用于生成輸入文件的隨機數程序 biggodsans ::執行大神與我的程序 myans fc biggodsans.out myans.out ::比較文件 if errorlevel 0 goto sign ::如果文件一樣的話就跳轉回sign處繼續處理,否則將在屏幕顯示錯誤信息(該行一定要連一起寫)
?其實重點在第六行,這個bat就是用來檢驗你的答案是否和標準答案完全一致(如有格式要求的題目)。
所以,只寫一行也行。
用兩個測試數據說明問題。點擊獲取測試數據
修改一下文件名,簡單測試文件比較
@echo offfc biggodsans.out myans.out
pause ::可能會一閃而過,起暫停屏幕作用
用toy6.in所得結果
用toy16.in得到錯誤信息
它會顯示不同處的上下文(我這里是程序沒有輸出)
?大概就是這樣了
?
?
一個華麗的分割線,以下是我和大神的代碼
?
?
?
我的代碼是()
1 #include<cstdio> 2 #include<iostream> 3 #include<string> 4 using namespace std; 5 string name[100006]; 6 bool inorout[100006]; //第i個小人的朝向,false表示向內 7 int n,m; 8 int i,j,ai,si; 9 int nowp=1; 10 int main() 11 { 12 freopen("toy.in","r",stdin); 13 freopen("myans.out","w",stdout); 14 scanf("%d%d",&n,&m); 15 for(i=1;i<=n;++i) 16 { 17 scanf("%d",&j); 18 inorout[i]=(j==0?false:true); 19 cin>>name[i]; 20 } 21 while(m--) //就是一個簡單的模擬 22 { 23 scanf("%d%d",&ai,&si); 24 if(inorout[nowp]==(bool)ai) nowp=nowp-si+n; //顯然朝向和向左右數有關 25 else nowp+=si; 26 nowp=nowp%n; //注意:它是個圈!!! 27 } 28 cout<<name[nowp]; 29 return 0; 30 } 31?
我以為我完全正確。然而,我得了90分...
我終于知道題目里的mengbier是誰了
比賽后我找到大神的答案
1 #include<cstdio> //大神的代碼,膜拜ing... 2 const int N=1e5+5,L=11; 3 int n,q,i,a[N],x; 4 char s[N][L]; 5 int read(){ 6 char c=getchar();int k=0;for (;c<48||c>57;c=getchar()); 7 for (;c>47&&c<58;c=getchar()) k=(k<<3)+(k<<1)+c-48;return k; 8 } 9 int main(){ 10 freopen("toy.in","r",stdin); 11 freopen("biggodsans.out","w",stdout); 12 for (n=read(),q=read(),i=0;i<n;i++){ 13 a[i]=read();scanf("%s",s[i]); 14 } 15 for (x=0;q--;){ 16 int opt=read()^a[x],k=read(); 17 if (opt) x=(x+k)%n; 18 else x=(x-k+n)%n; 19 } 20 printf("%s",s[x]); 21 }?
轉載于:https://www.cnblogs.com/callmebg/p/6347892.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: Storing and Retrievi
- 下一篇: 需求文档模板