以前傻傻地以为对拍在竞赛中不怎么起作用(可见我以前有多单纯),但现在发现,高手都用这个,所今天就好好的学了下对拍。
首先说一下对拍有什么用,它主要用来测试你的程序是否完美,在竞赛时期属于一种辅助性的东西,因为很多时候竞赛题目给出的数据都不具有特例性,所以有时即使你样例过了却不意味着你全过,所以要用到它。
首先,来说一下对拍要用到的 "东西"--------------> 数据生成程序 + 暴力或其他人的 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
来源: http://www.cnblogs.com/bingdada/p/6440460.html