Windowsバッチ対拍

6794 ワード


アルゴリズム系コンテストのテーマを作るとき、素朴で完全に正しいアルゴリズムを保証できるが、タイムアウトすると考えやすい.効率的なアルゴリズムは、完全に正しいことを保証することはできません.この場合、効率的なアルゴリズムの正確性を検証するために、素朴なアルゴリズム、データ生成プログラム、ファイル比較プログラムを自分で書くことができます.
 
Windowsでは、fcコマンドがファイルを比較する機能を提供しており、バッチ処理はLinuxのbashなどに及ばないが、自動的に比較するプログラムを書くのに十分である.
 
ランダムデータの生成-----C++rand()の使い方:
rand()はパラメータを必要とせず、0から最大乱数までの任意の整数を返します.最大乱数のサイズは通常、固定された大きな整数です.このように、0~10の10個の整数を生成する場合は、int N=rand()%11と表現することができる.このように、Nの値は0~10の乱数であり、1~10を生成するとint N=1+rand()%10となる.要約すると、a+rand()%nのうちのaは開始値であり、nは整数の範囲であると表すことができる.a+rand()%(b-a+1)は、a~b間の1つの乱数が0~1の小数であれば、0~10の整数を先に取得し、その後、10をすべて除算して10個の乱数から10個の乱数を得ることができ、ランダムから100%の乱数を得るには、まず0~100の10個の整数を得て、それからすべて100を除算する必要があり、その他の場合はこのように推定する.通常rand()で生成される乱数は、プログラムのデバッグを容易にするために設計されたものであり、実行するたびに前回と同じである.毎回異なる乱数を生成するにはtimeを含めることができる.hヘッダファイルは、srand(unsigned)time(NULL))を使用して現在の時間を使用して乱数発生器をランダム化し、2回の運転ごとに異なる乱数シーケンスが得られることを保証します.
また、プログラムにsrand(unsigned)time(NULL))を1回書くだけで、マルチライトがエラーになります.最初に乱数を生成した後、srand(unsigned)time(NULL)を1回書きました.時間によって種子を埋めたのに相当し、今回埋めた種子は前回の種子と全く同じであるため、発生したシーケンスも同じであり、コンピュータはこのシーケンスの値を順番に最初から取り出し、上記の結果を生じた.
次にrand()が生み出す乱数は最大数万というようです.では、どのようにして数億の大きな乱数を生み出すのでしょうか.
rand()*rand()は間違っていて、このような確率は違います.正確に乱数を大きくする方法はrand 1()< 
単純なランダム・データ・ジェネレータ:
 
 1 #include <iostream>

 2 #include <cstdio>

 3 #include <cstdlib>

 4 #include <ctime>

 5 

 6 using namespace std;

 7 

 8 int main()

 9 {

10     srand(time(0));

11     int t=0;

12     t=rand()%100;

13     cout<<t<<endl;

14     while(t--)

15     {

16         int n=0;

17         n=10000;

18         cout<<n<<endl;

19         for (int i=1;i<=n;i++)

20         {

21             int a=0,b=0;

22             a=(rand()%10000000)<<8 | (rand()%10000000);

23             b=(rand()%10000000)<<8 | (rand()%10000000);

24             if (a>b)

25             {

26                 int temp=b;

27                 b=a;

28                 a=temp;

29             }

30             cout<<a<<" "<<b<<endl;

31         }

32 

33     }

34     return 0;

35 }

 
 
バッチ・ビート・プログラム:
 
1 :loop

2 make.exe > data.txt          //make.exe          

3 standard.exe < data.txt > std.txt   //standard.exe    

4 overtaking.exe < data.txt > ans.txt   //overtaking.exe     

5 fc /A std.txt ans.txt

6 if not errorlevel 1 goto loop

7 pause
8 :end

 
コマンドラインインタフェースでは、ファイルの違いが見つからないことを絶えず提示し、安心して提出することができます.もちろん、素朴なアルゴリズムが正しいことが前提です.