Windows系统对拍程序

Windows系统对拍程序,其中包含c++11用法,请使用c++11编译。

此对拍程序自动使用g++对源代码进行编译。如果出现找不到g++错误,请将g++所在目录添加至系统的环境变量列表中。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cstdlib>
 4 #include <ctime>
 5
 6 // 设置区
 7 namespace Settings {
 8     const int MAX_LEN = 20; // 当发现错误时,显示错误行数据的最大长度
 9     const int CASE_CNT = 100; // 测试次数
10     const int BUFFER_SIZE = 1 << 10; // 每行的缓冲区大小
11     const char *const testFile = "1.cpp"; // 需要测试的源代码文件名(相对路径)
12     const char *const stdFile = "2.cpp"; // 标准答案的源代码文件名(相对路径)
13     const char *const dataFile = "3.cpp"; // 随机生成数据的源代码文件名(相对路径)
14 }
15
16 using namespace Settings;
17 using namespace std;
18 char cmd[BUFFER_SIZE], info[BUFFER_SIZE];
19 char buf1[BUFFER_SIZE], buf2[BUFFER_SIZE];
20
21 template <typename ...T>
22 int run(const char *str, T ...args) {
23     sprintf(cmd, str, args...);
24     return system(cmd);
25 }
26
27 bool fileCompare(const char *stdOutput, const char *userOutput) {
28     FILE *fp_std = fopen(stdOutput, "r"), *fp_user = fopen(userOutput, "r");
29     if (fp_std == nullptr || fp_user == nullptr) {
30         perror(nullptr);
31         return false;
32     }
33     for (int i = 1; !feof(fp_std) && !feof(fp_user); ++i) {
34         char *p1 = fgets(buf1, BUFFER_SIZE, fp_std);
35         char *p2 = fgets(buf2, BUFFER_SIZE, fp_user);
36         if (p1 == nullptr && p2 == nullptr) {
37             return true;
38         } else if (!p1 || !p2 || strcmp(p1, p2)) {
39             sprintf(info,
40                     "Difference found in line %d:\n  std: %.*s user: %.*s",
41                     i, MAX_LEN, p1 ? p1 : "(EOF Detected)\n",
42                     MAX_LEN, p2 ? p2 : "(EOF Detected)\n");
43             break;
44         }
45     }
46     return false;
47 }
48
49 int main() {
50     printf("Compiling... ");
51     run("g++ %s -o test.exe", testFile);
52     run("g++ %s -o std.exe", stdFile);
53     run("g++ %s -o data.exe", dataFile);
54     printf("Finished.\n");
55     clock_t st, ed;
56     for (int i = 1; i <= CASE_CNT; ++i) {
57         printf("Case %03d: ", i);
58         run("data.exe >data.txt");
59         run("std.exe <data.txt >std.txt");
60         st = clock();
61         run("test.exe <data.txt >test.txt");
62         ed = clock();
63         if (!fileCompare("std.txt", "test.txt")) {
64             printf("Wrong Answer.\n------------------------------\n");
65             puts(info);
66             printf("------------------------------\nNote: At most %d characters will be shown for both lines.\n", MAX_LEN);
67             printf("Press anykey to exit.\n");
68             getchar();
69             break;
70         } else {
71             printf("Accepted. Time: %dms.\n", int(ed - st));
72         }
73     }
74     return 0;
75 }

原文地址:https://www.cnblogs.com/sandychn/p/10355239.html

时间: 2024-08-05 11:15:15

Windows系统对拍程序的相关文章

对拍程序讲解及源码举例

对拍程序 一.介绍 在做题或者正式比赛过程中总会把水题做水做乱,但因为样例有坑所以直接过了样例,然后拿去评测结果发现全WA.那如何在这种情况下检查自己程序或算法的正确性呢?对拍是一个简便省事的方案. 所谓“对拍”,顾名思义,就是让两者相互比对.所谓“两者”,一是你要测试的程序,二是一个答案在该程序在一定范围(时间/空间)内结果必定正确的程序(一般是用暴力求解的程序). 两个程序准备好编译好了以后,就可以开始准备测试用的输入样例了.但是输入样例要是人为准备起来的话肯定浪费时间还费脑,更别提在正式比

Windows对拍模板

注意这是在Windows下的模板,Linux下的过段时间再补充. 单次对拍 1 @echo off 2 3 rand.exe>data.in 4 5 std.exe<data.in>std.out 6 my.exe<data.in>my.out 7 8 fc std.out my.out 9 pause 循环随机对拍 1 @echo off 2 :loop 3 rand.exe %random% > data.in 4 std.exe < data.in >

[zt]手把手教你写对拍程序(PASCAL)

谁适合看这篇文章? ACMERS,OIERS或其它参加算法竞赛或需要算法的人 对操作系统并不太熟悉的人 不会写对拍的人 在网上找不到一个特别详细的对拍样例的人 不嫌弃我写的太低幼的人 前言 在NOIP或是ACM比赛中,一个对拍程序的重要性不言而喻,再有一个效率较低的正确程序下(这是大前提,如果你连一个绝对正确的程序都无法保证的话,那还是不要考虑对拍了),他可以检验你的“高级算法”是不是正确.当然,正确性是完全无法保证的.一般对拍都会用随机函数生成数据,边界条件极限条件极有可能遇不上,也会有很多对

手把手教你写对拍程序(PASCAL)

谁适合看这篇文章? ACMERS,OIERS或其它参加算法竞赛或需要算法的人 对操作系统并不太熟悉的人 不会写对拍的人 在网上找不到一个特别详细的对拍样例的人 不嫌弃我写的太低幼的人 前言 在NOIP或是ACM比赛中,一个对拍程序的重要性不言而喻,再有一个效率较低的正确程序下(这是大前提,如果你连一个绝对正确的程序都无法保证的话,那还是不要考虑对拍了),他可以检验你的“高级算法”是不是正确.当然,正确性是完全无法保证的.一般对拍都会用随机函数生成数据,边界条件极限条件极有可能遇不上,也会有很多对

【技巧】算法竞赛中对拍程序的写法

在竞赛过程中一个对拍程序可以帮你排除许多错误, 如果担心自己写的正解被一些小数据卡掉, 我们通常会写个对拍程序来检查正解的正确性, 通过大量数据观察正解与暴力的输出是否相同. 我们首先拿出我们写的可能会超时但是可以保证绝对正确的暴力程序,称作bf.exe, 然后拿出我们写的待检测的正解,称作std.exe, 接着我们写一个随机数据生成程序,用来一次生成一组自制随机数据用来检测输出,称作gen.exe, 然后我们来写一个利用windows批处理的对拍程序. 在你的程序的根目录下新建一个称作chec

windows对拍及其应用

目录 经典代码 示例 duipai.bat data.exe baoli.exe mine.exe WARN! #include <bits/stdc++.h>在OI等里面不一定能应用,下面只是为了减小长度而已 bits库实际上就是#include <XXX>了一堆而已 目录 经典代码 对拍.bat :loop makedata.exe K.exe Kture.exe fc a.out b.out if %errorlevel%==0 goto loop pause 解释 :loo

C++对拍程序

考场没心态,担心程序写挂 这时写一个对拍程序就可以大大降低你的担心 所以背个板子就可以了: #include<iostream> #include<cmath> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<algorithm> #include<windows.h> using namespace

Windows 10 UWP程序标题栏设置

原文:Windows 10 UWP程序标题栏设置 在Windows 10程序中,以前只能用于全屏方式的Metro程序现在可以运行在窗口模式下了,并且改了个新名字,叫Windows 通用程序(Universal Windows app),简称UWP程序.新的UWP程序虽然大体上还是和以前的Metro程序差不多的,但还是引入了一点新东西的,本文这里就介绍一下它的标题栏设置的几个特性. 隐藏标题栏: 将应用界面扩展至 Titlebar 区域 CoreApplication.GetCurrentView

Windows 8 应用程序前后台切换事件监听

在一些情况下,我们需要监听应用程序切换到后台或者从后台切换至前台的事件,从而进行相关处理操作.支付宝应用锁屏(IOS,Android平台)的处理中就需要监听此事件,在用户将应用切换至后台一段时间后再切换至前台的情况下就需要弹出锁屏页面. 下图给出Windows 应用商店应用的生命周期图,应用前后台切换就是在运行和挂起直接进行切换,关于生命周期的详细介绍可以参阅官方文档:http://msdn.microsoft.com/zh-cn/library/windows/apps/hh464925.as