Home
Problem
Status
Contest
Workbook
User
Group
Forum
Register
Login
{"managingGroups":{},"author":"liangjingtao","updateTime":1696902301000,"title":"学会对拍","dislikeCnt":9,"content":"在比赛中,通常用对排检查你程序的正确性\n对拍包含四部分:\n1.随机数据生成程序(data.cpp)\n2.百分百正确的暴力程序(std.cpp)\n3.被检查的程序(a.cpp)\n4.控制脚本(run.bat)\n对于随机数据生成程序我们叫它data.cpp,记住C++的随机函数:\n\nsrand(time(0)); //生成随机种子,整个程序只需调用一次\nint a \u003d rand(); // 返回一个0~0x7fff的整数\nint b \u003d rand() % (N + 1); //返回一个0~N的整数(N\u003c\u003d0x7fff)\n\n对于暴力程序,请写一个你能力范围内的保证正确性的尽量简短的暴力程序,我们叫他 std.cpp。\n对于控制脚本,在windows下,通常如下:(用txt文件编写,写好后后缀改成bat双击,我们叫他run.bat)\n\n:loop\n\ndata.exe \u003e in.txt\nstd.exe \u003c in.txt \u003e std.out\na.exe \u003c in.txt \u003e a.out\nfc std.out a.out\nif not errorlevel 1 goto loop\npause\n\n\n脚本解释:\n\u003e in.txt 表示输出到in.txt。 \n\u003c in.txt 表示从in.txt 输入。\nfc 是全文比较两个文件\nerrorlevel这句 是检查上一句执行后的系统错误代码(如果上一句话比对是一致的,那么错误代码返回0,否则返回1)\nif errorlevel 1 表示判断是否错误代码 \u003e\u003d1\nif not errorlevel 1 表示判断是否错误代码 \u003c 1\n\n\n\nlinux 下的脚本,保存到 run.bash中,在终端写./run.bash 运行:(首先,对所有源文件编译)\n#!/bin/bash\nwhile true\ndo\n ./data\n ./std\n ./a\n if !(diff std.out my.out); then\n echo \"WA\"\n break\nelse\necho \"AC\"\n fi\ndone\n一般来说,在考场上,写了对拍,或者验证了大数据,分数才是你的。","threadId":172275,"likeCnt":2,"createTime":1696875847000,"isWorkbook":false,"viewCnt":212,"openness":2,"fav":false,"id":4168,"trustable":false}