日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单的对拍

發布時間:2023/12/9 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单的对拍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  在算法競賽中,我們常用對拍來初步檢驗程序。

  網上也有其它的關于對拍的教程,但是任性的我還是要自己寫一篇教程。 

   

?

  首先,我們要知道我們是用一個叫做” 批處理文件(.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 off
fc 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

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的简单的对拍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。