[关闭]
@zhshh 2018-07-22T04:31:19.000000Z 字数 1679 阅读 1229

windows下对拍及其应用

@zhshh OI 其他


WARN!
#include <bits/stdc++.h>在OI等里面不一定能应用,下面只是为了减小长度而已
bits库实际上就是#include <XXX>了一堆而已

目录

经典代码

对拍.bat

  1. :loop
  2. makedata.exe
  3. K.exe
  4. Kture.exe
  5. fc a.out b.out
  6. if %errorlevel%==0 goto loop
  7. pause

解释

  1. :loop

创建叫做loop的标签

  1. makedata.exe
  2. K.exe
  3. Kture.exe

运行makedata.exe,K.exe,Kture.exe
其中makedata输出到x.in,然后K.exe从x.in读入,输出到a.out,Ktrue.exe从x.in读入,输出到b.out

  1. fc a.out b.out
  2. if %errorlevel%==0 goto loop
  3. pause

比较a.out b.out
fc是windows下面一个程序,简单来说如果两个文件相同返回0,不同返回1
%errorlevel%是一个变量,意思是上一行代码的返回值
如果 返回==0 跳转到loop(第一行标签)
如果 返回不等于0 跳过这句话,执行pause(暂停),然后程序结束

示例

duipai.bat

  1. :loop
  2. echo %random%|data.exe
  3. baoli.exe
  4. mine.exe
  5. fc mine.out baoli.out
  6. if %errorlevel%==0 goto loop
  7. pause

data.exe

输出测试数据到in.in

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. int rands;
  5. freopen("in.in","w",stdout);
  6. cin>>rands;
  7. srand(rands);//随机数种子,一会再说
  8. cout<<rand()<<" "<<rand();
  9. return 0;
  10. }

由于windowsCPP的特性,srand(time(0))一秒只有一个种子,而自己的程序不会太慢,所以直接输入一个种子即可
echo %random%|data.exe里面,是%random%是一个随机数(由duipai.bat解析器cmd.exe随机,每次都是随机的)
|是管道运算,把前面命令应该显示的东西作为标准输入给后面的,echo XXX是显示XXX
这句话意思是把%random%(叫做random的变量,在没有手动声明其值时,每次调用都是随机数)输入给data.exe

baoli.exe

一个已知正解的程序,比如包括暴力求解程序,别人、网上的正解等

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. int q,w;
  5. freopen("in.in","r",stdin);
  6. freopen("baoli.out","w",stdout);
  7. cin>>q>>w;
  8. int ans=0;
  9. if(q>0) {
  10. for(int i=1;i<=q;i++){
  11. ans++;
  12. }
  13. }else{
  14. for(int i=-1;i>=q;i--){
  15. ans--;
  16. }
  17. }
  18. if(w>0) {
  19. for(int i=1;i<=w;i++){
  20. ans++;
  21. }
  22. }else{
  23. for(int i=-1;i>=w;i--){
  24. ans--;
  25. }
  26. }
  27. cout<<ans;
  28. return 0;
  29. }

mine.exe

自己的程序或者测试的程序
为了显示功能,这里是随机出错。。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main(){
  4. int q,w;
  5. freopen("in.in","r",stdin);
  6. freopen("mine.out","w",stdout);
  7. cin>>q>>w;
  8. srand(time(0));
  9. int r=rand()%20;
  10. if(r>=10){
  11. cout<<q+w+1;
  12. }else{
  13. cout<<q+w;
  14. }
  15. return 0;
  16. }

最后双击duipai.bat即可看到效果

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注