代码拉取完成,页面将自动刷新
#include <iostream>
#include <cstdio>
#include <fstream>
#include <ctime>
#include <utility>
#include <algorithm>
#include <cstring>
#include <string>
#include "Maker.cpp"
using namespace std;
//1 _WIN32
#ifdef _WIN32
#define WINDOWS_ENVIRONMENT 1
//1
#else
//2 WIN32
#ifdef WIN32
#define WINDOWS_ENVIRONMENT 1
//2
#else
//3 _WIN64
#ifdef _WIN64
#define WINDOWS_ENVIRONMENT 1
//3
#else
//4 WIN64
#ifdef WIN64
#define WINDOWS_ENVIRONMENT 1
//4
#else
//5 WINDOWS
#ifdef WINDOWS
#define WINDOWS_ENVIRONMENT 1
//5
#else
//6 __linux__
#ifdef __linux__
#define LINUX_ENVIRONMENT 1
//6
#else
//7 Unknown
#define UNKNOWN_ENVIRONMENT 1
//6
#endif
//5
#endif
//4
#endif
//3
#endif
//2
#endif
//1
#endif
namespace maker
{
#ifdef WINDOWS_ENVIRONMENT
// this file name permits only 128 chars limit
inline void REMOVE_FILE(const char *__FILE_NAME__)
{
char __cmd__[135];
sprintf(__cmd__, "rd %s ", __FILE_NAME__);
system(__cmd__);
}
#define MAKE_DIR(__DIR_NAME__) system("mkdir " __DIR_NAME__)
inline void make_data(const char *__maker_name__)
{
char __cmd__[135];
sprintf(__cmd__, "%s > data.in", __maker_name__);
system(__cmd__);
}
inline double run_code(const char *__runner_name__, const char *__prefix__)
{
char __cmd__[135];
clock_t Begin, End;
sprintf(__cmd__, "%s < data.in > %s.out", __runner_name__, __prefix__);
Begin = clock();
system(__cmd__);
End = clock();
return (double)((End - Begin) / CLOCKS_PER_SEC);
}
inline void run_code(const char *__runner_name__, const char *__prefix__, clock_t &Begin, clock_t &End)
{
char __cmd__[135];
Begin = clock();
sprintf(__cmd__, "%s < data.in > %s.out", __runner_name__, __prefix__);
End = clock();
system(__cmd__);
}
inline void error_copy(int __index__, const char *__file_name__, const char *__error_type__)
{
char __cmd__[145];
sprintf(__cmd__, "copy %s data-%d-%s.in", __file_name__, __index__, __error_type__);
system(__cmd__);
}
#define CMP(ANAME, BNAME) system("fc " ANAME " " BNAME)
#define PAUSE system("pause")
#else
#ifdef LINUX_ENVIRONMENT
#define REMOVE_FILE(__FILE_NAME__) system("rm -f " __FILE_NAME__)
#define MAKE_DIR(__DIR_NAME__) system("mkdir " __DIR_NAME__)
inline void make_data(const char *__maker_name__)
{
char __cmd__[135];
sprintf(__cmd__, "%s > data.in", __maker_name__);
system(__cmd__);
}
inline double run_code(const char *__runner_name__, const char *__prefix__)
{
char __cmd__[135];
clock_t Begin, End;
sprintf(__cmd__, "%s < data.in > %s.out", __runner_name__, __prefix__);
Begin = clock();
system(__cmd__);
End = clock();
return (double)((End - Begin) / CLOCKS_PER_SEC);
}
inline void run_code(const char *__runner_name__, const char *__prefix__, clock_t &Begin, clock_t &End)
{
char __cmd__[135];
Begin = clock();
sprintf(__cmd__, "%s < data.in > %s.out", __runner_name__, __prefix__);
End = clock();
system(__cmd__);
}
inline void error_copy(int __index__, const char *__file_name__, const char *__error_type__)
{
char __cmd__[145];
sprintf(__cmd__, "cp %s data-%d-%s.in", __file_name__, __index__, __error_type__);
system(__cmd__);
}
#endif
#endif
class patcher
{
private:
char __your_name__[512];
char __right_name__[512];
// this should be a exe or msi name
char __maker_name__[512];
double Time_Limit;
public:
patcher()
{
__your_name__[0] = '\0';
__right_name__[0] = '\0';
__maker_name__[0] = '\0';
Time_Limit = 1.00000;
}
void set_a_name(const char *__a_name__)
{
sprintf(__your_name__, "%s", __a_name__);
}
void set_b_name(const char *__b_name__)
{
sprintf(__right_name__, "%s", __b_name__);
}
void set_gen_name(const char *__gen__)
{
sprintf(__maker_name__, "%s", __gen__);
}
void patch_environment(const int &patch_times)
{
char __cmd__[1024];
bool error_type = false;
double COST;
#ifdef WINDOWS_ENVIRONMENT
for (int i = 1; i <= patch_times; i++)
{
MAKE_DIR("patch-WA");
printf("Running %s\n", __maker_name__);
make_data(__maker_name__);
printf("Running %s.\n", __your_name__);
if (COST = run_code(__your_name__, "a") > Time_Limit)
{
puts("A code Time Limit Ecceded.");
error_type = true;
error_copy(i, "data.in", "TLE-A");
}
printf("%s Runned %lf seconds.\n", __your_name__, COST);
printf("Running %s.\n", __right_name__);
if (COST = run_code(__right_name__, "b") > Time_Limit)
{
puts("B code Time Limit Ecceded.");
error_type = true;
error_copy(i, "data.in", "TLE-B");
}
if (CMP("a.out", "b.out"))
{
printf("Probably wrong answer on test %d.\n", i);
error_copy(i, "data.in", "WA");
error_type = true;
}
else
printf("Test %d passed.\n", i);
if (error_type)
{
puts("Copied to dir patch-WA");
error_type = false;
PAUSE;
}
}
#endif
}
}; //namespace patcher
}
// ending
#ifdef LINUX_ENVIRONMENT
#undef LINUX_ENVIRONMENT
#undef MAKE_DIR
#undef REMOVE_FILE
#undef PAUSE
#endif
#ifdef WINDOWS_ENVIRONMENT
#undef WINDOWS_ENVIRONMENT
#undef REMOVE_FILE
#undef MAKE_DIR
#endif
#ifdef UNKNOWN_ENVIRONMENT
#undef UNKNOWN_ENVIRONMENT
#endif
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。