以前傻傻地以为对拍在竞赛中不怎么起作用(可见我以前有多单纯),但现在发现,高手都用这个,所今天就好好的学了下对拍。
首先说一下对拍有什么用,它主要用来测试你的程序是否完美,在竞赛时期属于一种辅助性的东西,因为很多时候竞赛题目给出的数据都不具有特例性,所以有时即使你样例过了却不意味着你全过,所以要用到它。
首先,来说一下对拍要用到的“东西”--------------> 数据生成程序 + 暴力或其他人的AC程序 + 你自己的程序
那下面就先给出对拍的代码:(先用txt文件保存,然后把后缀改成 " .bat ")
1 :again 2 data > input.txt 3 Accode < input.txt > Accode_output.txt 4 Mycode < input.txt > Mycode_output.txt 5 fc Accode_output.txt My_output.txt 6 if not errorlevel 1 goto again 7 pause
那么现在就来解释一下这段代码
首先说一下第一行“ :again” ,冒号后面的其实是一个标号,与第六行的“goto"有关,学过c++或c语言的人大概都知道了,就是如果满足第六行的条件(not errorlevel 1)就”跳“到第一行重新开始
第二行的"data"其实是一个程序名称,就是前面所说的代码生成程序,而”data“后面的 " > " 符号的意思就是将 "data" 程序打印出来的数据输入到 ”input.txt"中
接下来第三行 "Accode" 是一个正确的程序名称,其后的"<"符号的意思大概聪明机智的你已经猜到了,它的作用是把刚才生成的“input.txt”塞到你找到的正确程序当中,而后的“>"符号作用和第二行的是一样的,也是将程序的输出数据保存到文件当中,不过当前文件名是”Accode_output.txt"
第四行的作用和第三行一样,只不过换了一个程序名“Mycode",就是你自己写的程序,这里不再赘述
第五行中的”fc" 其实是一个比较函数,它用来比较“Accode_output.txt”文件和“Mycode.output.txt”文件,就是比较刚才生成的两个文件,第六行的意思是如果上面所比较的两个文件无差异就转到标号”again“,如果有差异则暂停批处理文件。
那么到现在,对拍已经讲完,但有一些需要注意的地方
1.记得对拍需要用到的“东西”,数据生成程序 + 暴力或其他人的AC程序 + 你自己的程序 ,记得是程序!是程序!!不是代码!
2.上面代码中的程序名可以自行更改
3.如果数据生成函数中也有你需要塞进去的数据,可以参考第二行与第三行(好好体会)。
博主:WBH