├── .gitignore ├── Makefile ├── README.md ├── builtin └── checker │ ├── acmp │ ├── acmp.cpp │ ├── bcmp │ ├── bcmp.cpp │ ├── caseicmp │ ├── caseicmp.cpp │ ├── casencmp │ ├── casencmp.cpp │ ├── casewcmp │ ├── casewcmp.cpp │ ├── dcmp │ ├── dcmp.cpp │ ├── fcmp │ ├── fcmp.cpp │ ├── hcmp │ ├── hcmp.cpp │ ├── icmp │ ├── icmp.cpp │ ├── lcmp │ ├── lcmp.cpp │ ├── ncmp │ ├── ncmp.cpp │ ├── rcmp │ ├── rcmp.cpp │ ├── rcmp4 │ ├── rcmp4.cpp │ ├── rcmp6 │ ├── rcmp6.cpp │ ├── rcmp9 │ ├── rcmp9.cpp │ ├── rncmp │ ├── rncmp.cpp │ ├── uncmp │ ├── uncmp.cpp │ ├── wcmp │ ├── wcmp.cpp │ ├── yesno │ └── yesno.cpp ├── data ├── 19 │ └── 1 │ │ ├── Makefile │ │ ├── input1.txt │ │ ├── input10.txt │ │ ├── input2.txt │ │ ├── input3.txt │ │ ├── input4.txt │ │ ├── input5.txt │ │ ├── input6.txt │ │ ├── input7.txt │ │ ├── input8.txt │ │ ├── input9.txt │ │ ├── judger │ │ ├── judger_class_lib.py │ │ ├── output1.txt │ │ ├── output10.txt │ │ ├── output2.txt │ │ ├── output3.txt │ │ ├── output4.txt │ │ ├── output5.txt │ │ ├── output6.txt │ │ ├── output7.txt │ │ ├── output8.txt │ │ ├── output9.txt │ │ ├── problem.conf │ │ ├── text.md │ │ ├── uoj_judger_compiler.py │ │ ├── uoj_judger_config.py │ │ ├── uoj_judger_reporter.py │ │ └── uoj_judger_tester.py ├── 22 │ └── 1 │ │ ├── Makefile │ │ ├── checker.py │ │ ├── download │ │ ├── Makefile │ │ ├── Node.cpp │ │ ├── Node.h │ │ ├── example_in.txt │ │ ├── example_out.txt │ │ └── main.cpp │ │ ├── input1.txt │ │ ├── input2.txt │ │ ├── input3.txt │ │ ├── input4.txt │ │ ├── input5.txt │ │ ├── judger │ │ ├── judger_class_lib.py │ │ ├── output1.txt │ │ ├── output2.txt │ │ ├── output3.txt │ │ ├── output4.txt │ │ ├── output5.txt │ │ ├── problem.conf │ │ ├── require │ │ ├── Makefile │ │ ├── Node.cpp │ │ ├── Node.h │ │ └── main.cpp │ │ ├── text.md │ │ ├── uoj_judger_compiler.py │ │ ├── uoj_judger_config.py │ │ ├── uoj_judger_reporter.py │ │ └── uoj_judger_tester.py ├── 24 │ └── 1 │ │ ├── Makefile │ │ ├── data1.in │ │ ├── data1.out │ │ ├── data10.in │ │ ├── data10.out │ │ ├── data2.in │ │ ├── data2.out │ │ ├── data3.in │ │ ├── data3.out │ │ ├── data4.in │ │ ├── data4.out │ │ ├── data5.in │ │ ├── data5.out │ │ ├── data6.in │ │ ├── data6.out │ │ ├── data7.in │ │ ├── data7.out │ │ ├── data8.in │ │ ├── data8.out │ │ ├── data9.in │ │ ├── data9.out │ │ ├── datagen.py │ │ ├── download │ │ ├── example_in.txt │ │ ├── example_out.txt │ │ └── main.cpp │ │ ├── judger │ │ ├── judger.cpp │ │ ├── judger_class_lib.py │ │ ├── problem.conf │ │ ├── require │ │ └── main.cpp │ │ ├── text.md │ │ ├── uoj_judger_compiler.py │ │ ├── uoj_judger_config.py │ │ ├── uoj_judger_reporter.py │ │ └── uoj_judger_tester.py ├── 37 │ └── 1 │ │ ├── Makefile │ │ ├── description.md │ │ ├── download │ │ ├── download.zip │ │ └── figure.png │ │ ├── input1.txt │ │ ├── input2.txt │ │ ├── input3.txt │ │ ├── input4.txt │ │ ├── input5.txt │ │ ├── input6.txt │ │ ├── input7.txt │ │ ├── input8.txt │ │ ├── judger │ │ ├── judger_class_lib.py │ │ ├── output1.txt │ │ ├── output2.txt │ │ ├── output3.txt │ │ ├── output4.txt │ │ ├── output5.txt │ │ ├── output6.txt │ │ ├── output7.txt │ │ ├── output8.txt │ │ ├── problem.conf │ │ ├── require │ │ ├── Makefile1 │ │ ├── Makefile2 │ │ ├── Makefile3 │ │ ├── Makefile4 │ │ ├── main.cpp │ │ └── main2.cpp │ │ ├── uoj_judger_compiler.py │ │ ├── uoj_judger_config.py │ │ ├── uoj_judger_reporter.py │ │ └── uoj_judger_tester.py └── 60 │ └── 1 │ ├── Makefile │ ├── answer.txt │ ├── judger │ ├── judger_class_lib.py │ ├── problem.conf │ ├── problem.md │ ├── uoj_judger_compiler.py │ ├── uoj_judger_config.py │ ├── uoj_judger_reporter.py │ └── uoj_judger_tester.py ├── find_problem_id.py ├── find_python_version.py ├── include └── testlib.h ├── judger_class_lib.py ├── run.sh ├── run └── run_program.cpp ├── submission.conf ├── uoj_judger_compiler.py ├── uoj_judger_config.py ├── uoj_judger_reporter.py └── uoj_judger_tester.py /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | */.DS_Store 3 | *.pyc 4 | */*.pyc 5 | work/* 6 | result/* 7 | data/*/1/submit/* 8 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | INCLUDE_PATH = include 2 | CXXFLAGS = -I./include -O2 3 | 4 | EXE_CHECKER = \ 5 | builtin/checker/bcmp \ 6 | builtin/checker/acmp \ 7 | builtin/checker/caseicmp \ 8 | builtin/checker/casencmp \ 9 | builtin/checker/casewcmp \ 10 | builtin/checker/dcmp \ 11 | builtin/checker/fcmp \ 12 | builtin/checker/hcmp \ 13 | builtin/checker/icmp \ 14 | builtin/checker/lcmp \ 15 | builtin/checker/ncmp \ 16 | builtin/checker/rcmp \ 17 | builtin/checker/rcmp4 \ 18 | builtin/checker/rcmp6 \ 19 | builtin/checker/rcmp9 \ 20 | builtin/checker/rncmp \ 21 | builtin/checker/uncmp \ 22 | builtin/checker/wcmp \ 23 | builtin/checker/yesno 24 | 25 | EXE = $(EXE_CHECKER) 26 | 27 | all: $(EXE) 28 | 29 | % : %.cpp 30 | $(CXX) $(CXXFLAGS) $< -o $@ 31 | 32 | $(EXE_CHECKER): include/testlib.h 33 | 34 | clean: 35 | rm -f $(EXE) 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UOJ_Offline 2 | 3 | ### 出题流程: 4 | 5 | - 在本项目issues中提出proposal。需要写一个简略的题目描述,列出考查的知识点。可以提供部分代码或样例数据。因为可能会被建议修改,为减轻大家工作量,不需要将题目完全完善。Proposal截止**13周周日**。 6 | 7 | - 助教一般在一周内会根据情况提出修改意见。如果不太符合课程需要,可能会要求大幅度修改或重新提proposal。通过proposal的同学可以继续出题。 8 | 9 | - 按下述使用步骤完成题面、数据、标答和judger。若有人工评分,需要具体给出评分方式。 10 | 11 | ### 使用步骤: 12 | 13 | - 将题目按照`./data/`中样题的格式放进`./data`文件夹中 14 | - 将`./submission.conf`中的`problem_id`改为你出的题目号(如31) 15 | - 执行`make`,重新编译输出各个`checker`的可执行文件 16 | - 执行`bash ./run.sh`(执行之前请将`run.sh`中第一行的`path`改为你的文件夹存放的绝对路径,注意路径中不要有中文),该脚本会将题目文件夹中的`submit`、`require`、`Makefile`、`judger`等文件复制到`./work`文件夹下,然后进行评测,评测结果会输出到`./result`文件夹中。 17 | 18 | ### 文件说明: 19 | 20 | - `./data`:题目文件夹,其中应包括: 21 | 22 | - `download`文件夹中的文件供做题同学下载; 23 | - `require`文件夹中的文件是评测提交代码时所需的文件; 24 | - `submit`文件夹中的内容为标准提交答案; 25 | - 输入文件、输出文件 26 | - `judger`:评测文件,具体见下方Judger系统说明 27 | - `problem.conf`文件中定义了一些评测参数: 28 | - n_tests: 测试点数 29 | - execute_name: 执行文件名 30 | - time_limit: 时间限制 31 | - memory_limit: 空间限制 32 | - input_pre/input_suf/output_pre/output_suf: 输入/输出文件前缀/后缀 33 | - use_builtin_checker: 系统提供的比较答案是否正确的checker(具体cheker名可见`./builtin/checker`文件夹下,如`lcmp`要求全匹配,`rncmp`要求浮点数误差范围内匹配等) 34 | - use_python_judger:当设置为"on"时使用python2对judger进行编译 35 | - use_python3_judger: 当设置为"on"时使用python3对judger进行编译(不设置时默认使用python2) 36 | 37 | - `./work`:评测时所用的工作文件夹,每次评测前都会清空原有内容 38 | 39 | - `./result`:评测结果输出的文件夹,每次评测前都会清空原有内容 40 | 41 | - `checker_error.txt`:每个测试点的评测结果输出文件 42 | - `compiler_result.txt`:编译错误输出文件 43 | - `cur_status.txt`:评测状态文件 44 | - `result.txt`:评测完成后的输出文件 45 | 46 | - `./builtin`:包含了系统提供的多种`checker` 47 | 48 | - `lcmp`: 按行比较,忽略末尾空白字符 49 | - `rcmp`: 单个浮点数比较,绝对值误差不超过1.5e-6 50 | - `rcmp4`: 单个浮点数比较,绝对值误差不超过1e-4 51 | - `rcmp6`: 单个浮点数比较,绝对值误差不超过1e-6 52 | - `rncmp`: 多个浮点数比较,绝对值误差不超过1.5e-5 53 | - `ncmp`: 多个整数比较 54 | 55 | - `./include`:包含编译`checker`所需的头文件 56 | 57 | - `Makefile`:编译`./builtin`中的`checker` 58 | 59 | - `submission.conf`:包含`problem_id`等评测参数 60 | 61 | - `find_problem_id.py`:供`run.sh`查询评测题目id使用 62 | 63 | - `find_python_version.py`: 供`run.sh`查询python版本使用 64 | 65 | - Judger系统: 66 | 67 | - `uoj_judger_compiler.py`,` uoj_judger_config.py`,` uoj_judger_reporter.py`,` uoj_judger_tester.py`,judger工作时需要的头文件,分别提供了编译、参数配置、结果输出、代码评测功能,不要修改。 68 | 69 | - `judger`:出题时需要针对不同题目分别编写的评测文件 70 | 71 | ```python 72 | main_path = sys.argv[1] #主文件夹,当前文件 73 | work_path = sys.argv[2] #./work 74 | result_path = sys.argv[3] #./result 75 | data_path = sys.argv[4] #./data/31 76 | 77 | C = pyjudgerConfig(main_path, work_path, result_path, data_path) #配置参数类 78 | n = int(C.config["n_tests"]) #测试点数 79 | R = pyjudgerReporter(C, n) #结果输出类 80 | Co = pyjudgerCompiler(C) #编译类 81 | T = pyjudger_custom_tester(C) #测试类,必要时可在judger文件中重写该类 82 | ``` 83 | 84 | ### 注意: 85 | 86 | - 对于不同的题目,你只需增加`data`文件夹下的题目,其他文件不要改动。在写judeger时可参考样题,其中样题的judger分别有以下特征: 87 | - 24:标准judger 88 | - 19:重写Executer 89 | - 22:重写checker 90 | - 37:重写整个tester+子任务 91 | - 60:选择题 92 | - 项目中`./work`、`./result`、题目中`submit`、`require`、`download`等空文件夹未显示,运行脚本时将自动处理,无需手动创建; 93 | - 样题均未提供标准答案(包括人工评分标准),如有需要,可联系助教; 94 | - 该项目仅供测试judger使用,未加入测试内存、时间使用情况等功能,且不能明确具体的错误类型,除了编译错误外其他错误均显示为Wrong Answer; 95 | - 如对项目代码疑问,请联系关健(邮箱:j-guan19@mails.tsinghua.edu.cn)。 96 | 97 | -------------------------------------------------------------------------------- /builtin/checker/acmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/acmp -------------------------------------------------------------------------------- /builtin/checker/acmp.cpp: -------------------------------------------------------------------------------- 1 | #include "testlib.h" 2 | #include 3 | #include 4 | 5 | const double EPS = 1.5E-6; 6 | 7 | int main(int argc, char * argv[]) 8 | { 9 | setName("compare two doubles, maximal absolute error = %.10lf", EPS); 10 | registerTestlibCmd(argc, argv); 11 | 12 | double ja = ans.readDouble(); 13 | double pa = ouf.readDouble(); 14 | 15 | if (fabs(ja - pa) > EPS + 1E-15) 16 | quitf(_wa, "expected %.10lf, found %.10lf", ja, pa); 17 | 18 | quitf(_ok, "answer is %.10lf", ja); 19 | } 20 | -------------------------------------------------------------------------------- /builtin/checker/bcmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/bcmp -------------------------------------------------------------------------------- /builtin/checker/bcmp.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | inline const char *englishEnding(int x) 4 | { 5 | x %= 100; 6 | if (x / 10 == 1) 7 | return "th"; 8 | if (x % 10 == 1) 9 | return "st"; 10 | if (x % 10 == 2) 11 | return "nd"; 12 | if (x % 10 == 3) 13 | return "rd"; 14 | return "th"; 15 | } 16 | 17 | int main(int argc, char * argv[]) 18 | { 19 | if (argc != 4) 20 | return 1; 21 | FILE *fout = fopen(argv[2], "r"); 22 | FILE *fans = fopen(argv[3], "r"); 23 | 24 | if (fout == NULL || fans == NULL) 25 | return 1; 26 | 27 | int n = 0; 28 | while (true) 29 | { 30 | n++; 31 | int c, d; 32 | c = fgetc(fout); 33 | d = fgetc(fans); 34 | if (c == EOF && d == EOF) 35 | break; 36 | if (c != d) 37 | { 38 | if (d == EOF) 39 | fprintf(stderr, "wrong answer %d%s byte differ - expected EOF found '%c'\n", n, englishEnding(n), (char)d); 40 | else if (c == EOF) 41 | fprintf(stderr, "wrong answer %d%s byte differ - expected '%c' found EOF\n", n, englishEnding(n), (char)c); 42 | else 43 | fprintf(stderr, "wrong answer %d%s byte differ - expected '%c' found '%c'\n", n, englishEnding(n), (char)d, (char)c); 44 | return 1; 45 | } 46 | } 47 | 48 | if (n == 0) 49 | fprintf(stderr, "ok empty file\n"); 50 | else if (n == 1) 51 | fprintf(stderr, "ok single byte\n"); 52 | else 53 | fprintf(stderr, "ok %d byte\n", n); 54 | return 0; 55 | } 56 | -------------------------------------------------------------------------------- /builtin/checker/caseicmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/caseicmp -------------------------------------------------------------------------------- /builtin/checker/caseicmp.cpp: -------------------------------------------------------------------------------- 1 | /** 2 | * Checker to compare output and answer in the form: 3 | * 4 | * Case 1: 5 | * Case 2: 6 | * ... 7 | * Case n: 8 | * 9 | */ 10 | 11 | #include "testlib.h" 12 | 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | 35 | using namespace std; 36 | 37 | #define forn(i, n) for (int i = 0; i < int(n); i++) 38 | 39 | vector readStream(InStream& in, TResult pe) 40 | { 41 | vector result; 42 | 43 | for (int testCase = 1; !in.seekEof(); testCase++) 44 | { 45 | string caseStr = in.readToken(); 46 | if (caseStr != "Case") 47 | quitf(pe, "Expected 'Case' but found '%s' [test case %d]", compress(caseStr).c_str(), testCase); 48 | 49 | string numExpStr; 50 | stringstream ss; 51 | ss << testCase; 52 | ss >> numExpStr; 53 | numExpStr += ":"; 54 | string numStr = in.readToken(); 55 | if (numExpStr != numStr) 56 | quitf(pe, "Expected '%s' but found '%s' [test case %d]", compress(numExpStr).c_str(), compress(numStr).c_str(), testCase); 57 | 58 | result.push_back(in.readLong()); 59 | } 60 | 61 | return result; 62 | } 63 | 64 | int main(int argc, char* argv[]) 65 | { 66 | setName("Single int64 checker with testcase-support"); 67 | registerTestlibCmd(argc, argv); 68 | 69 | vector ja = readStream(ans, _fail); 70 | vector pa = readStream(ouf, _pe); 71 | 72 | forn(i, min(ja.size(), pa.size())) 73 | if (ja[i] != pa[i]) 74 | quitf(_wa, "Expected %s found %s [test case %d]", vtos(ja[i]).c_str(), vtos(pa[i]).c_str(), i + 1); 75 | 76 | if (ja.size() != pa.size()) 77 | quitf(_pe, "Expected %d test case(s) but found %d", (int)ja.size(), (int)pa.size()); 78 | 79 | string message = format("%d case(s):", (int)ja.size()); 80 | if (ja.size() <= 5) 81 | { 82 | forn(i, ja.size()) 83 | message += " " + vtos(ja[i]); 84 | } 85 | else 86 | { 87 | forn(i, 3) 88 | message += " " + vtos(ja[i]); 89 | message += " ..."; 90 | forn(i, 2) 91 | message += " " + vtos(ja[ja.size() - 2 + i]); 92 | } 93 | 94 | quitf(_ok, "%s", message.c_str()); 95 | } 96 | -------------------------------------------------------------------------------- /builtin/checker/casencmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/casencmp -------------------------------------------------------------------------------- /builtin/checker/casencmp.cpp: -------------------------------------------------------------------------------- 1 | /** 2 | * Checker to compare output and answer in the form: 3 | * 4 | * Case 1: ... 5 | * Case 2: ... 6 | * ... 7 | * Case n: ... 8 | * 9 | */ 10 | 11 | #include "testlib.h" 12 | 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | 35 | using namespace std; 36 | 37 | #define forn(i, n) for (int i = 0; i < int(n); i++) 38 | 39 | string token; 40 | 41 | vector readStreamCase(InStream& in, TResult pe, int testCase, bool& prereadCase) 42 | { 43 | if (!prereadCase) 44 | { 45 | string caseStr = in.readToken(); 46 | if (caseStr != "Case") 47 | quitf(pe, "Expected 'Case' but found '%s' [test case %d]", compress(caseStr).c_str(), testCase); 48 | } 49 | 50 | string numExpStr; 51 | stringstream ss; 52 | ss << testCase; 53 | ss >> numExpStr; 54 | numExpStr += ":"; 55 | string numStr = in.readToken(); 56 | if (numExpStr != numStr) 57 | quitf(pe, "Expected '%s' but found '%s' [test case %d]", compress(numExpStr).c_str(), compress(numStr).c_str(), testCase); 58 | 59 | vector result; 60 | while (!in.seekEof()) 61 | { 62 | in.readTokenTo(token); 63 | if (token == "Case") 64 | { 65 | prereadCase = true; 66 | break; 67 | } 68 | 69 | result.push_back(stringToLongLong(in, token.c_str())); 70 | } 71 | 72 | return result; 73 | } 74 | 75 | string longLongsToString(const vector& a) 76 | { 77 | if (a.empty()) 78 | return "\"\" [size=0]"; 79 | 80 | string elems; 81 | if (a.size() <= 5) 82 | { 83 | forn(i, a.size()) 84 | elems += vtos(a[i]) + " "; 85 | } 86 | else 87 | { 88 | forn(i, 3) 89 | elems += vtos(a[i]) + " "; 90 | elems += "... "; 91 | forn(i, 2) 92 | elems += vtos(a[a.size() - 2 + i]) + " "; 93 | } 94 | 95 | return format("\"%s\" [size=%d]", trim(elems).c_str(), (int)a.size()); 96 | } 97 | 98 | int main(int argc, char* argv[]) 99 | { 100 | setName("Many int64s checker with testcase-support"); 101 | registerTestlibCmd(argc, argv); 102 | 103 | int testCase = 0; 104 | 105 | bool ansPrereadCase = false; 106 | bool oufPrereadCase = false; 107 | 108 | while (!ans.seekEof()) 109 | { 110 | testCase++; 111 | 112 | vector ja = readStreamCase(ans, _fail, testCase, ansPrereadCase); 113 | vector pa = readStreamCase(ouf, _pe, testCase, oufPrereadCase); 114 | 115 | if (ja != pa) 116 | { 117 | string js = longLongsToString(ja); 118 | string ps = longLongsToString(pa); 119 | quitf(_wa, "Sequences differ: jury has %s, but participant has %s [test case %d]", js.c_str(), ps.c_str(), testCase); 120 | } 121 | } 122 | 123 | quitf(_ok, "%d test cases(s)", testCase); 124 | } 125 | -------------------------------------------------------------------------------- /builtin/checker/casewcmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/casewcmp -------------------------------------------------------------------------------- /builtin/checker/casewcmp.cpp: -------------------------------------------------------------------------------- 1 | /** 2 | * Checker to compare output and answer in the form: 3 | * 4 | * Case 1: ... 5 | * Case 2: ... 6 | * ... 7 | * Case n: ... 8 | * 9 | */ 10 | 11 | #include "testlib.h" 12 | 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | 35 | using namespace std; 36 | 37 | #define forn(i, n) for (int i = 0; i < int(n); i++) 38 | 39 | string token; 40 | 41 | vector readStreamCase(InStream& in, TResult pe, int testCase, bool& prereadCase) 42 | { 43 | if (!prereadCase) 44 | { 45 | string caseStr = in.readToken(); 46 | if (caseStr != "Case") 47 | quitf(pe, "Expected 'Case' but found '%s' [test case %d]", compress(caseStr).c_str(), testCase); 48 | } 49 | 50 | string numExpStr; 51 | stringstream ss; 52 | ss << testCase; 53 | ss >> numExpStr; 54 | numExpStr += ":"; 55 | string numStr = in.readToken(); 56 | if (numExpStr != numStr) 57 | quitf(pe, "Expected '%s' but found '%s' [test case %d]", compress(numExpStr).c_str(), compress(numStr).c_str(), testCase); 58 | 59 | vector result; 60 | while (!in.seekEof()) 61 | { 62 | in.readTokenTo(token); 63 | if (token == "Case") 64 | { 65 | prereadCase = true; 66 | break; 67 | } 68 | 69 | result.push_back(token); 70 | } 71 | 72 | return result; 73 | } 74 | 75 | string stringsToString(const vector& a) 76 | { 77 | if (a.empty()) 78 | return "\"\" [size=0]"; 79 | 80 | string elems; 81 | forn(i, a.size()) 82 | elems += a[i] + " "; 83 | 84 | return format("\"%s\" [size=%d]", compress(trim(elems)).c_str(), (int)a.size()); 85 | } 86 | 87 | int main(int argc, char* argv[]) 88 | { 89 | setName("Tokens checker with testcase-support"); 90 | registerTestlibCmd(argc, argv); 91 | 92 | int testCase = 0; 93 | 94 | bool ansPrereadCase = false; 95 | bool oufPrereadCase = false; 96 | 97 | while (!ans.seekEof()) 98 | { 99 | testCase++; 100 | 101 | vector ja = readStreamCase(ans, _fail, testCase, ansPrereadCase); 102 | vector pa = readStreamCase(ouf, _pe, testCase, oufPrereadCase); 103 | 104 | if (ja != pa) 105 | { 106 | string js = stringsToString(ja); 107 | string ps = stringsToString(pa); 108 | quitf(_wa, "Sequences differ: jury has %s, but participant has %s [test case %d]", js.c_str(), ps.c_str(), testCase); 109 | } 110 | } 111 | 112 | quitf(_ok, "%d test cases(s)", testCase); 113 | } 114 | -------------------------------------------------------------------------------- /builtin/checker/dcmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/dcmp -------------------------------------------------------------------------------- /builtin/checker/dcmp.cpp: -------------------------------------------------------------------------------- 1 | #include "testlib.h" 2 | #include 3 | #include 4 | 5 | const double EPS = 1E-6; 6 | 7 | int main(int argc, char * argv[]) 8 | { 9 | setName("compare two doubles, maximal absolute or relative error = %.10lf", EPS); 10 | registerTestlibCmd(argc, argv); 11 | 12 | double ja = ans.readDouble(); 13 | double pa = ouf.readDouble(); 14 | 15 | if (!doubleCompare(ja, pa, EPS)) 16 | quitf(_wa, "expected %.10lf, found %.10lf", ja, pa); 17 | 18 | quitf(_ok, "answer is %.10lf", ja); 19 | } 20 | -------------------------------------------------------------------------------- /builtin/checker/fcmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/fcmp -------------------------------------------------------------------------------- /builtin/checker/fcmp.cpp: -------------------------------------------------------------------------------- 1 | #include "testlib.h" 2 | #include 3 | #include 4 | #include 5 | 6 | using namespace std; 7 | 8 | int main(int argc, char * argv[]) 9 | { 10 | setName("compare files as sequence of lines"); 11 | registerTestlibCmd(argc, argv); 12 | 13 | std::string strAnswer; 14 | 15 | int n = 0; 16 | while (!ans.eof()) 17 | { 18 | std::string j = ans.readString(); 19 | 20 | if (j == "" && ans.eof()) 21 | break; 22 | 23 | strAnswer = j; 24 | std::string p = ouf.readString(); 25 | 26 | n++; 27 | 28 | if (j != p) 29 | quitf(_wa, "%d%s lines differ - expected: '%s', found: '%s'", n, englishEnding(n).c_str(), compress(j).c_str(), compress(p).c_str()); 30 | } 31 | 32 | if (n == 1) 33 | quitf(_ok, "single line: '%s'", compress(strAnswer).c_str()); 34 | 35 | quitf(_ok, "%d lines", n); 36 | } 37 | -------------------------------------------------------------------------------- /builtin/checker/hcmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/hcmp -------------------------------------------------------------------------------- /builtin/checker/hcmp.cpp: -------------------------------------------------------------------------------- 1 | #include "testlib.h" 2 | 3 | #include 4 | 5 | using namespace std; 6 | 7 | pattern pnum("0|-?[1-9][0-9]*"); 8 | 9 | bool isNumeric(const string& p) 10 | { 11 | return pnum.matches(p); 12 | } 13 | 14 | int main(int argc, char * argv[]) 15 | { 16 | setName("compare two signed huge integers"); 17 | registerTestlibCmd(argc, argv); 18 | 19 | string ja = ans.readWord(); 20 | string pa = ouf.readWord(); 21 | 22 | if (!isNumeric(ja)) 23 | quitf(_fail, "%s is not a valid integer", compress(ja).c_str()); 24 | 25 | if (!ans.seekEof()) 26 | quitf(_fail, "expected exactly one token in the answer file"); 27 | 28 | if (!isNumeric(pa)) 29 | quitf(_pe, "%s is not a valid integer", compress(pa).c_str()); 30 | 31 | if (ja != pa) 32 | quitf(_wa, "expected '%s', found '%s'", compress(ja).c_str(), compress(pa).c_str()); 33 | 34 | quitf(_ok, "answer is '%s'", compress(ja).c_str()); 35 | } 36 | -------------------------------------------------------------------------------- /builtin/checker/icmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/icmp -------------------------------------------------------------------------------- /builtin/checker/icmp.cpp: -------------------------------------------------------------------------------- 1 | #include "testlib.h" 2 | #include 3 | 4 | int main(int argc, char * argv[]) 5 | { 6 | setName("compare two signed int%d's", (int)(8 * sizeof(int))); 7 | registerTestlibCmd(argc, argv); 8 | 9 | int ja = ans.readInt(); 10 | int pa = ouf.readInt(); 11 | 12 | if (ja != pa) 13 | quitf(_wa, "expected %d, found %d", ja, pa); 14 | 15 | quitf(_ok, "answer is %d", ja); 16 | } 17 | -------------------------------------------------------------------------------- /builtin/checker/lcmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/lcmp -------------------------------------------------------------------------------- /builtin/checker/lcmp.cpp: -------------------------------------------------------------------------------- 1 | #include "testlib.h" 2 | #include 3 | #include 4 | #include 5 | 6 | using namespace std; 7 | 8 | bool compareWords(string a, string b) 9 | { 10 | vector va, vb; 11 | stringstream sa; 12 | 13 | sa << a; 14 | string cur; 15 | while (sa >> cur) 16 | va.push_back(cur); 17 | 18 | stringstream sb; 19 | sb << b; 20 | while (sb >> cur) 21 | vb.push_back(cur); 22 | 23 | return (va == vb); 24 | } 25 | 26 | int main(int argc, char * argv[]) 27 | { 28 | setName("compare files as sequence of tokens in lines"); 29 | registerTestlibCmd(argc, argv); 30 | 31 | std::string strAnswer; 32 | 33 | int n = 0; 34 | while (!ans.eof()) 35 | { 36 | std::string j = ans.readString(); 37 | 38 | if (j == "" && ans.eof()) 39 | break; 40 | 41 | std::string p = ouf.readString(); 42 | strAnswer = p; 43 | 44 | n++; 45 | 46 | if (!compareWords(j, p)) 47 | quitf(_wa, "%d%s lines differ - expected: '%s', found: '%s'", n, englishEnding(n).c_str(), compress(j).c_str(), compress(p).c_str()); 48 | } 49 | 50 | if (n == 1) 51 | quitf(_ok, "single line: '%s'", compress(strAnswer).c_str()); 52 | 53 | quitf(_ok, "%d lines", n); 54 | } 55 | -------------------------------------------------------------------------------- /builtin/checker/ncmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/ncmp -------------------------------------------------------------------------------- /builtin/checker/ncmp.cpp: -------------------------------------------------------------------------------- 1 | #include "testlib.h" 2 | #include 3 | 4 | using namespace std; 5 | 6 | int main(int argc, char * argv[]) 7 | { 8 | setName("compare ordered sequences of signed int%d numbers", (int)(8 * sizeof(long long))); 9 | 10 | registerTestlibCmd(argc, argv); 11 | 12 | int n = 0; 13 | string firstElems; 14 | 15 | while (!ans.seekEof() && !ouf.seekEof()) 16 | { 17 | n++; 18 | long long j = ans.readLong(); 19 | long long p = ouf.readLong(); 20 | if (j != p) 21 | quitf(_wa, "%d%s numbers differ - expected: '%s', found: '%s'", n, englishEnding(n).c_str(), vtos(j).c_str(), vtos(p).c_str()); 22 | else 23 | if (n <= 5) 24 | { 25 | if (firstElems.length() > 0) 26 | firstElems += " "; 27 | firstElems += vtos(j); 28 | } 29 | } 30 | 31 | int extraInAnsCount = 0; 32 | 33 | while (!ans.seekEof()) 34 | { 35 | ans.readLong(); 36 | extraInAnsCount++; 37 | } 38 | 39 | int extraInOufCount = 0; 40 | 41 | while (!ouf.seekEof()) 42 | { 43 | ouf.readLong(); 44 | extraInOufCount++; 45 | } 46 | 47 | if (extraInAnsCount > 0) 48 | quitf(_wa, "Answer contains longer sequence [length = %d], but output contains %d elements", n + extraInAnsCount, n); 49 | 50 | if (extraInOufCount > 0) 51 | quitf(_wa, "Output contains longer sequence [length = %d], but answer contains %d elements", n + extraInOufCount, n); 52 | 53 | if (n <= 5) 54 | quitf(_ok, "%d number(s): \"%s\"", n, compress(firstElems).c_str()); 55 | else 56 | quitf(_ok, "%d numbers", n); 57 | } 58 | -------------------------------------------------------------------------------- /builtin/checker/rcmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/rcmp -------------------------------------------------------------------------------- /builtin/checker/rcmp.cpp: -------------------------------------------------------------------------------- 1 | #include "testlib.h" 2 | #include 3 | #include 4 | 5 | const double EPS = 1.5E-6; 6 | 7 | int main(int argc, char * argv[]) 8 | { 9 | setName("compare two doubles, maximal absolute error = %.10lf", EPS); 10 | registerTestlibCmd(argc, argv); 11 | 12 | double ja = ans.readDouble(); 13 | double pa = ouf.readDouble(); 14 | 15 | if (fabs(ja - pa) > EPS + 1E-15) 16 | quitf(_wa, "expected %.10lf, found %.10lf", ja, pa); 17 | 18 | quitf(_ok, "answer is %.10lf", ja); 19 | } 20 | -------------------------------------------------------------------------------- /builtin/checker/rcmp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/rcmp4 -------------------------------------------------------------------------------- /builtin/checker/rcmp4.cpp: -------------------------------------------------------------------------------- 1 | #include "testlib.h" 2 | #include 3 | 4 | using namespace std; 5 | 6 | const double EPS = 1E-4; 7 | 8 | int main(int argc, char * argv[]) 9 | { 10 | setName("compare two sequences of doubles, max absolute or relative error = %.5lf", EPS); 11 | registerTestlibCmd(argc, argv); 12 | 13 | int n = 0; 14 | double j, p; 15 | 16 | while (!ans.seekEof()) 17 | { 18 | n++; 19 | j = ans.readDouble(); 20 | p = ouf.readDouble(); 21 | if (!doubleCompare(j, p, EPS)) 22 | { 23 | quitf(_wa, "%d%s numbers differ - expected: '%.5lf', found: '%.5lf', error = '%.5lf'", 24 | n, englishEnding(n).c_str(), j, p, doubleDelta(j, p)); 25 | } 26 | } 27 | 28 | if (n == 1) 29 | quitf(_ok, "found '%.5lf', expected '%.5lf', error '%.5lf'", p, j, doubleDelta(j, p)); 30 | 31 | quitf(_ok, "%d numbers", n); 32 | } 33 | -------------------------------------------------------------------------------- /builtin/checker/rcmp6: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/rcmp6 -------------------------------------------------------------------------------- /builtin/checker/rcmp6.cpp: -------------------------------------------------------------------------------- 1 | #include "testlib.h" 2 | #include 3 | 4 | using namespace std; 5 | 6 | const double EPS = 1E-6; 7 | 8 | int main(int argc, char * argv[]) 9 | { 10 | setName("compare two sequences of doubles, max absolute or relative error = %.7lf", EPS); 11 | registerTestlibCmd(argc, argv); 12 | 13 | int n = 0; 14 | double j, p; 15 | 16 | while (!ans.seekEof()) 17 | { 18 | n++; 19 | j = ans.readDouble(); 20 | p = ouf.readDouble(); 21 | if (!doubleCompare(j, p, EPS)) 22 | { 23 | quitf(_wa, "%d%s numbers differ - expected: '%.7lf', found: '%.7lf', error = '%.7lf'", 24 | n, englishEnding(n).c_str(), j, p, doubleDelta(j, p)); 25 | } 26 | } 27 | 28 | if (n == 1) 29 | quitf(_ok, "found '%.7lf', expected '%.7lf', error '%.7lf'", p, j, doubleDelta(j, p)); 30 | 31 | quitf(_ok, "%d numbers", n); 32 | } 33 | -------------------------------------------------------------------------------- /builtin/checker/rcmp9: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/rcmp9 -------------------------------------------------------------------------------- /builtin/checker/rcmp9.cpp: -------------------------------------------------------------------------------- 1 | #include "testlib.h" 2 | #include 3 | 4 | using namespace std; 5 | 6 | const double EPS = 1E-9; 7 | 8 | int main(int argc, char * argv[]) 9 | { 10 | setName("compare two sequences of doubles, max absolute or relative error = %.10lf", EPS); 11 | registerTestlibCmd(argc, argv); 12 | 13 | int n = 0; 14 | double j, p; 15 | 16 | while (!ans.seekEof()) 17 | { 18 | n++; 19 | j = ans.readDouble(); 20 | p = ouf.readDouble(); 21 | if (!doubleCompare(j, p, EPS)) 22 | { 23 | quitf(_wa, "%d%s numbers differ - expected: '%.7lf', found: '%.7lf', error = '%.7lf'", 24 | n, englishEnding(n).c_str(), j, p, doubleDelta(j, p)); 25 | } 26 | } 27 | 28 | if (n == 1) 29 | quitf(_ok, "found '%.9lf', expected '%.9lf', error '%.9lf'", p, j, doubleDelta(j, p)); 30 | 31 | quitf(_ok, "%d numbers", n); 32 | } 33 | -------------------------------------------------------------------------------- /builtin/checker/rncmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/rncmp -------------------------------------------------------------------------------- /builtin/checker/rncmp.cpp: -------------------------------------------------------------------------------- 1 | #include "testlib.h" 2 | #include 3 | 4 | using namespace std; 5 | 6 | const double EPS = 1.5E-5; 7 | 8 | int main(int argc, char * argv[]) 9 | { 10 | setName("compare two sequences of doubles, maximal absolute error = %.10lf", EPS); 11 | registerTestlibCmd(argc, argv); 12 | 13 | int n = 0; 14 | while (!ans.seekEof()) 15 | { 16 | n++; 17 | double j = ans.readDouble(); 18 | double p = ouf.readDouble(); 19 | if (fabs(j - p) > EPS + 1E-15) 20 | quitf(_wa, "%d%s numbers differ - expected: '%.10lf', found: '%.10lf'", n, englishEnding(n).c_str(), j, p); 21 | } 22 | 23 | quitf(_ok, "%d numbers", n); 24 | } 25 | -------------------------------------------------------------------------------- /builtin/checker/uncmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/uncmp -------------------------------------------------------------------------------- /builtin/checker/uncmp.cpp: -------------------------------------------------------------------------------- 1 | #include "testlib.h" 2 | #include 3 | 4 | using namespace std; 5 | 6 | int main(int argc, char * argv[]) 7 | { 8 | setName("compare unordered sequences of signed int%d numbers", (int)(8 * sizeof(long long))); 9 | 10 | registerTestlibCmd(argc, argv); 11 | 12 | vector ja, pa; 13 | 14 | while (!ans.seekEof()) 15 | ja.push_back(ans.readLong()); 16 | 17 | while (!ouf.seekEof()) 18 | pa.push_back(ouf.readLong()); 19 | 20 | if (ja.size() != pa.size()) 21 | quitf(_wa, "Expected %d elements, but %d found", (int)ja.size(), (int)pa.size()); 22 | 23 | sort(ja.begin(), ja.end()); 24 | sort(pa.begin(), pa.end()); 25 | 26 | if (ja != pa) 27 | quitf(_wa, "Expected sequence and output are different (as unordered sequences) [size=%d]", (int)ja.size()); 28 | 29 | string message; 30 | 31 | if (ja.size() != 1) 32 | if (ja.empty()) 33 | message = "empty sequence"; 34 | else 35 | message = vtos(ja.size()) + " numbers (in increasing order):"; 36 | else 37 | message = vtos(ja.size()) + " number:"; 38 | 39 | if (ja.size() <= 5) 40 | for (int i = 0; i < min(int(ja.size()), 5); i++) 41 | message += " " + vtos(ja[i]); 42 | else 43 | { 44 | for (int i = 0; i < 2; i++) 45 | message += " " + vtos(ja[i]); 46 | message += " ..."; 47 | for (int i = 0; i < 2; i++) 48 | message += " " + vtos(ja[ja.size() - 2 + i]); 49 | } 50 | 51 | quitf(_ok, "%s", message.c_str()); 52 | } 53 | -------------------------------------------------------------------------------- /builtin/checker/wcmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/wcmp -------------------------------------------------------------------------------- /builtin/checker/wcmp.cpp: -------------------------------------------------------------------------------- 1 | #include "testlib.h" 2 | 3 | using namespace std; 4 | 5 | int main(int argc, char * argv[]) 6 | { 7 | setName("compare sequences of tokens"); 8 | registerTestlibCmd(argc, argv); 9 | 10 | int n = 0; 11 | string j, p; 12 | 13 | while (!ans.seekEof() && !ouf.seekEof()) 14 | { 15 | n++; 16 | 17 | ans.readWordTo(j); 18 | ouf.readWordTo(p); 19 | 20 | if (j != p) 21 | quitf(_wa, "%d%s words differ - expected: '%s', found: '%s'", n, englishEnding(n).c_str(), compress(j).c_str(), compress(p).c_str()); 22 | } 23 | 24 | if (ans.seekEof() && ouf.seekEof()) 25 | { 26 | if (n == 1) 27 | quitf(_ok, "\"%s\"", compress(j).c_str()); 28 | else 29 | quitf(_ok, "%d tokens", n); 30 | } 31 | else 32 | { 33 | if (ans.seekEof()) 34 | quitf(_wa, "Participant output contains extra tokens"); 35 | else 36 | quitf(_wa, "Unexpected EOF in the participants output"); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /builtin/checker/yesno: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/builtin/checker/yesno -------------------------------------------------------------------------------- /builtin/checker/yesno.cpp: -------------------------------------------------------------------------------- 1 | #include "testlib.h" 2 | #include 3 | 4 | using namespace std; 5 | 6 | const string YES = "YES"; 7 | const string NO = "NO"; 8 | 9 | int main(int argc, char * argv[]) 10 | { 11 | setName("YES or NO (case insensetive)"); 12 | registerTestlibCmd(argc, argv); 13 | 14 | std::string ja = upperCase(ans.readWord()); 15 | std::string pa = upperCase(ouf.readWord()); 16 | 17 | if (ja != YES && ja != NO) 18 | quitf(_fail, "%s or %s expected in answer, but %s found", YES.c_str(), NO.c_str(), compress(ja).c_str()); 19 | 20 | if (pa != YES && pa != NO) 21 | quitf(_pe, "%s or %s expected, but %s found", YES.c_str(), NO.c_str(), compress(pa).c_str()); 22 | 23 | if (ja != pa) 24 | quitf(_wa, "expected %s, found %s", compress(ja).c_str(), compress(pa).c_str()); 25 | 26 | quitf(_ok, "answer is %s", ja.c_str()); 27 | } 28 | -------------------------------------------------------------------------------- /data/19/1/Makefile: -------------------------------------------------------------------------------- 1 | export INCLUDE_PATH 2 | CXXFLAGS = -I$(INCLUDE_PATH) -O2 -std=c++11 3 | 4 | all: 5 | chmod +x judger -------------------------------------------------------------------------------- /data/19/1/input1.txt: -------------------------------------------------------------------------------- 1 | ./main hello -------------------------------------------------------------------------------- /data/19/1/input10.txt: -------------------------------------------------------------------------------- 1 | ./main -e -a -e -------------------------------------------------------------------------------- /data/19/1/input2.txt: -------------------------------------------------------------------------------- 1 | ./main hello world -------------------------------------------------------------------------------- /data/19/1/input3.txt: -------------------------------------------------------------------------------- 1 | ./main hello world -------------------------------------------------------------------------------- /data/19/1/input4.txt: -------------------------------------------------------------------------------- 1 | ./main -n hello -------------------------------------------------------------------------------- /data/19/1/input5.txt: -------------------------------------------------------------------------------- 1 | ./main -e "\tt\ee\cc\nn" -------------------------------------------------------------------------------- /data/19/1/input6.txt: -------------------------------------------------------------------------------- 1 | ./main -ne "asd\n" -------------------------------------------------------------------------------- /data/19/1/input7.txt: -------------------------------------------------------------------------------- 1 | ./main -En "asd\n" -------------------------------------------------------------------------------- /data/19/1/input8.txt: -------------------------------------------------------------------------------- 1 | ./main -e "\?" -------------------------------------------------------------------------------- /data/19/1/input9.txt: -------------------------------------------------------------------------------- 1 | ./main -eabcd -------------------------------------------------------------------------------- /data/19/1/judger: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | #coding=utf-8 3 | 4 | import sys 5 | import os 6 | 7 | import judger_class_lib as lib 8 | from uoj_judger_compiler import * 9 | from uoj_judger_tester import * 10 | from uoj_judger_reporter import * 11 | from uoj_judger_config import * 12 | 13 | class MyExecuter(): 14 | 15 | def run(self, config, tester): 16 | cmd = open(tester.input_file_name, 'r').readline() 17 | ret = lib.run_program( \ 18 | main_path=config.main_path, \ 19 | result_file_name=config.result_path + "/run_submission_program.txt", \ 20 | input_file_name="/dev/null", \ 21 | output_file_name=tester.output_file_name, \ 22 | error_file_name="/dev/null", \ 23 | work_path=config.work_path, \ 24 | limit=lib.conf_run_limit("", index=tester.num, val=lib.RL_DEFAULT, config=config), \ 25 | type="default", \ 26 | raw_para=cmd, \ 27 | uoj_offline=("uoj_offline" in config.config)) 28 | if ret.type == lib.RS_AC and ret.exit_code != 0: 29 | ret.type = lib.RS_RE 30 | return ret 31 | 32 | if __name__=="__main__": 33 | main_path = sys.argv[1] 34 | work_path = sys.argv[2] 35 | result_path = sys.argv[3] 36 | data_path = sys.argv[4] 37 | 38 | C = pyjudgerConfig(main_path, work_path, result_path, data_path) 39 | n = int(C.config["n_tests"]) 40 | R = pyjudgerReporter(C, n) 41 | Co = pyjudgerCompiler(C) 42 | T = pyjudger_custom_tester(C, executer=MyExecuter()) 43 | 44 | R.report_judgement_status("Compiling") 45 | ret = Co.compile("main") 46 | if not ret.succeeded: 47 | R.end_judge_compile_error(info=lib.file_preview(result_path + "/compiler_result.txt")) 48 | 49 | for i in range(n): 50 | t = i + 1 51 | R.report_judgement_status("Judging #%d" % t) 52 | ret = T.test(t) 53 | R.add_point_info(ret) 54 | 55 | R.end_judge_ok() 56 | -------------------------------------------------------------------------------- /data/19/1/output1.txt: -------------------------------------------------------------------------------- 1 | hello 2 | -------------------------------------------------------------------------------- /data/19/1/output10.txt: -------------------------------------------------------------------------------- 1 | -a -e 2 | -------------------------------------------------------------------------------- /data/19/1/output2.txt: -------------------------------------------------------------------------------- 1 | hello world 2 | -------------------------------------------------------------------------------- /data/19/1/output3.txt: -------------------------------------------------------------------------------- 1 | hello world 2 | -------------------------------------------------------------------------------- /data/19/1/output4.txt: -------------------------------------------------------------------------------- 1 | hello -------------------------------------------------------------------------------- /data/19/1/output5.txt: -------------------------------------------------------------------------------- 1 | te -------------------------------------------------------------------------------- /data/19/1/output6.txt: -------------------------------------------------------------------------------- 1 | asd 2 | -------------------------------------------------------------------------------- /data/19/1/output7.txt: -------------------------------------------------------------------------------- 1 | asd\n -------------------------------------------------------------------------------- /data/19/1/output8.txt: -------------------------------------------------------------------------------- 1 | \? 2 | -------------------------------------------------------------------------------- /data/19/1/output9.txt: -------------------------------------------------------------------------------- 1 | -eabcd 2 | -------------------------------------------------------------------------------- /data/19/1/problem.conf: -------------------------------------------------------------------------------- 1 | time_limit 1 2 | memory_limit 256 3 | output_limit 64 4 | use_builtin_checker bcmp 5 | use_python_judger on 6 | n_tests 10 7 | -------------------------------------------------------------------------------- /data/19/1/text.md: -------------------------------------------------------------------------------- 1 | ### 题目描述 2 | 3 | 现在已有main.cppproduct.cppsum.cppfunctions.h四个文件。 4 | 5 | 文件内容见[下载链接](/download.php?type=problem&id=18) 6 | 7 | 你需要编写一个Makefile文件完成程序的编译过程,要求: 8 | 9 | * 在linux系统下,Makefile文件能正常运行。(编译器为g++。) 10 | 11 | * 使用make命令,能够联合编译多个源文件,最终生成名为main的可执行文件。(linux下无exe后缀。)main可以正常执行,其输出请查看示例。 12 | 13 | * 使用make debug命令,能够生成开启调试模式的可执行文件,同样生成名为main的可执行文件。调试模式的具体输出请查看示例。 14 | 15 | * 使用make clean命令,能够清理之前生成的文件,还原成最初的样子。 16 | 17 | **注意:你Makefile文件在结束任务后必须返回0。若返回非0值,则认为make失败,评测系统会给出Make Error的提示。** 18 | 19 | ### 输入样例 20 | 21 | ``` 22 | 1 1 23 | ``` 24 | 25 | ### 输出样例 26 | 27 | ``` 28 | 2 29 | 1 30 | ``` 31 | 32 | ### 调试模式输入样例 33 | 34 | ``` 35 | 1 1 36 | ``` 37 | 38 | ### 调试模式输出样例 39 | 40 | ``` 41 | running sum(a = 1, b = 1) 42 | 2 43 | running sum(a = 1, b = 1) 44 | 1 45 | ``` 46 | 47 | ### 提交要求 48 | 49 | 提交一个Makefile文件,满足上述需求。 50 | 51 | ### 评分标准 52 | 53 | OJ自动评测占100%。 54 | -------------------------------------------------------------------------------- /data/19/1/uoj_judger_compiler.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import judger_class_lib as lib 3 | 4 | class pyjudgerCompiler(object): 5 | def __init__(self, config): 6 | self.config = config 7 | 8 | def run_compiler(self, path, arg): 9 | argv = ["--type=compiler", "--work-path=" + path] 10 | argv.extend(arg) 11 | 12 | ret = lib.run_program( \ 13 | main_path=self.config.main_path, \ 14 | work_path=self.config.work_path, \ 15 | result_file_name=self.config.result_path + "/run_compiler_result.txt", \ 16 | input_file_name="/dev/null", \ 17 | output_file_name="stderr", \ 18 | error_file_name=self.config.result_path + "/compiler_result.txt", \ 19 | limit=lib.RL_COMPILER_DEFAULT, \ 20 | para_list=argv, \ 21 | uoj_offline=("uoj_offline" in self.config.config)) 22 | res = lib.RunCompilerResult(type=ret.type, ust=ret.ust, usm=ret.usm, \ 23 | succeeded=(ret.type == lib.RS_AC) and (ret.exit_code == 0)) 24 | if not res.succeeded: 25 | if res.type == lib.RS_AC: 26 | res.info = lib.file_preview(self.config.result_path + "/compiler_result.txt", 500) 27 | elif res.type == lib.RS_JGF: 28 | res.info = "No Comment" 29 | else: 30 | res.info = "Compiler " + lib.info_str(res.type) 31 | return res 32 | 33 | def compile_cpp(self, name, path=None): 34 | path = path or self.config.work_path 35 | argv = ["/usr/bin/g++", "-o", name, "-x", "c++", "answer.code", "-std=c++11", "-lm", "-O2", "-DONLINE_JUDGE"] 36 | return self.run_compiler(path, argv) 37 | 38 | def compile_command(self, para, path=None): 39 | path = path or self.config.work_path 40 | argv = para.split(' ') 41 | return self.run_compiler(path, argv) 42 | 43 | def compile(self, para): 44 | name = para 45 | if name + '_language' in self.config.config: 46 | lang = self.config.config[name + '_language'] 47 | print("has a language :", lang) 48 | #TODO check language type 49 | return self.compile_cpp(name) 50 | else: 51 | return self.compile_cpp(name) 52 | 53 | # if __name__ == "__main__": 54 | # def test(): 55 | # C = pyjudgerConfig() 56 | # os.chdir(C.work_path) 57 | # my_compiler = pyjudgerCompiler(C) 58 | # #以下是两种编译方法 59 | # #1. 默认编译 60 | # my_compiler.compile("main") 61 | # #2. 使用 g++ 或者 g++-4.8 或者直接用 /usr/bin/g++-4.8 62 | # #my_compiler.custom_compile("g++ -o main -x c++ main.code -lm -O2 -DONLINE_JUDGE") 63 | # test() 64 | -------------------------------------------------------------------------------- /data/19/1/uoj_judger_config.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import os 3 | class pyjudgerConfig: 4 | def __init__(self, main_path, work_path, result_path, data_path): 5 | self.config = dict() 6 | 7 | def load_config(config_file): 8 | configs = open(config_file, 'r').readlines() 9 | for each_config in configs: 10 | key, value = each_config.strip('\n').strip('\r').split(' ') 11 | self.config[key] = value 12 | 13 | self.main_path = main_path 14 | self.work_path = work_path 15 | self.result_path = result_path 16 | load_config(self.work_path + "/submission.conf") 17 | self.problem_id = self.config['problem_id'] 18 | self.data_path = data_path 19 | load_config(self.data_path + "/problem.conf") 20 | self.exec_file_name = "./main" 21 | 22 | #exec("cp %s/require/* %s 2>/dev/null"%(self.__data_path, self.__work_path)) 23 | 24 | #这里可以修改 25 | if "use_builtin_checker" in self.config: 26 | self.config["checker"] = self.main_path + "/builtin/checker/" + self.config["use_builtin_checker"] 27 | else: 28 | self.config["checker"] = self.data_path + "/chk" 29 | self.config["validator"] = self.data_path + "/val" 30 | 31 | #os.chdir(self.work_path) 32 | -------------------------------------------------------------------------------- /data/19/1/uoj_judger_reporter.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | from uoj_judger_config import * 3 | import judger_class_lib as lib 4 | import fcntl 5 | 6 | class pyjudgerReporter: 7 | def __init__(self, config, test_num): 8 | self.config = config 9 | self.tot_time = 0 10 | self.max_memory = 0 11 | self.details_out = "" 12 | self.tot_score = 0 13 | self.test_num = test_num 14 | 15 | def report_judgement_status(self, info): 16 | print(self.config.result_path+"/cur_status.txt") 17 | F = open(self.config.result_path+"/cur_status.txt", "w") 18 | fcntl.flock(F.fileno(), fcntl.LOCK_EX) 19 | F.write(info[:512]) 20 | 21 | def add_point_info(self, info): 22 | if info.ust >= 0: 23 | self.tot_time += info.ust 24 | if info.usm >= self.max_memory: 25 | self.max_memory = info.usm 26 | self.details_out += ""\ 27 | % (info.num, info.scr / self.test_num, info.info, info.ust, info.usm) 28 | self.tot_score += info.scr / self.test_num 29 | if info.input: 30 | self.details_out += "%s" % (lib.htmlspecialchars(info.input)) 31 | if info.output: 32 | self.details_out += "%s" % (lib.htmlspecialchars(info.output)) 33 | if info.res: 34 | self.details_out += "%s" % (lib.htmlspecialchars(info.res)) 35 | if info.extrainfo: 36 | self.details_out += info.extrainfo 37 | self.details_out += "\n" 38 | 39 | def add_subtask_info(self, subTaskIndex, scr=0, info="", points=None): 40 | self.details_out += "\n") 58 | F.write(self.details_out) 59 | F.write("\n") 60 | F.close() 61 | exit(0) 62 | 63 | def end_judge_judgement_failed(self, info=""): 64 | F = open(self.config.result_path+"/result.txt", "w") 65 | F.write("error Judgment Failed\n") 66 | F.write("details\n") 67 | F.write("%s\n" % lib.htmlspecialchars(info)) 68 | F.close() 69 | exit(0) 70 | 71 | def end_judge_compile_error(self, info=""): 72 | F = open(self.config.result_path+"/result.txt", "w") 73 | F.write("error Compile Error\n") 74 | F.write("details\n") 75 | F.write("%s\n" % lib.htmlspecialchars(info)) 76 | F.close() 77 | exit(0) 78 | 79 | def end_judge_custom_error(self, label, info=""): 80 | F = open(self.config.result_path+"/result.txt", "w") 81 | F.write("error %s\n" % label) 82 | F.write("details\n") 83 | F.write("%s\n" % lib.htmlspecialchars(info)) 84 | F.close() 85 | exit(0) 86 | -------------------------------------------------------------------------------- /data/22/1/Makefile: -------------------------------------------------------------------------------- 1 | export INCLUDE_PATH 2 | CXXFLAGS = -I$(INCLUDE_PATH) -O2 3 | 4 | all: judger 5 | 6 | 7 | -------------------------------------------------------------------------------- /data/22/1/checker.py: -------------------------------------------------------------------------------- 1 | import sys 2 | def eprint(*args, **kwargs): 3 | print(*args, file=sys.stderr, **kwargs) 4 | 5 | input, output, answer = sys.argv[1:] 6 | 7 | f_in = open(input) 8 | f_out = open(output) 9 | f_answer = open(answer) 10 | 11 | f_in_lines = f_in.readlines() 12 | 13 | ref_ans, n, m = int(f_in_lines[0].strip()), int(f_in_lines[1].strip()), int(f_in_lines[2].strip()) 14 | k = int(f_in_lines[m+3].strip()) 15 | 16 | f_answer_lines = f_answer.readlines() 17 | 18 | f_out_lines = f_out.readlines() 19 | score = 0 20 | 21 | for i in range(k): 22 | if f_out_lines[i].strip() != f_answer_lines[i].strip(): 23 | eprint("Wrong answer at the line %d." % (i+1)) 24 | sys.exit(0) 25 | 26 | cnt = list(map(int, f_out_lines[k].strip().split())) 27 | 28 | if cnt[0] + cnt[1] + cnt[2] != cnt[5]: 29 | eprint("Memory leak detected. Construction times: %d. Destruction times: %d" % 30 | (cnt[0] + cnt[1] + cnt[2], cnt[5])) 31 | sys.exit(0) 32 | 33 | tmp = (cnt[0] + cnt[1] + cnt[3]) * 10 + cnt[2] + cnt[4] 34 | if tmp <= ref_ans: 35 | assert f_out_lines[k+1].strip() == "YES" 36 | eprint("ok") 37 | else: 38 | assert f_out_lines[k+1].strip() == "NO" 39 | eprint("points 0.7\nYour count times: %s > %d" % (f_out_lines[k].strip(), ref_ans)) 40 | -------------------------------------------------------------------------------- /data/22/1/download/Makefile: -------------------------------------------------------------------------------- 1 | main: main.cpp Array.cpp Node.cpp Array.h Node.h 2 | g++ main.cpp Array.cpp Node.cpp -o main -std=c++14 -------------------------------------------------------------------------------- /data/22/1/download/Node.cpp: -------------------------------------------------------------------------------- 1 | #include "Node.h" 2 | 3 | int Node::num_createfunc = 0, Node::num_copyfunc = 0, Node::num_movefunc = 0; 4 | int Node::num_copyassign = 0, Node::num_moveassign = 0, Node::num_delfunc = 0; 5 | 6 | Node::Node(int v): val(v) { 7 | num_createfunc++; 8 | } 9 | Node::~Node() { 10 | num_delfunc++; 11 | } 12 | Node::Node(const Node &y): val(y.val) { 13 | num_copyfunc++; 14 | } 15 | Node::Node(Node &&y): val(y.val) { 16 | y.val = 0; 17 | num_movefunc++; 18 | } 19 | Node& Node::operator=(const Node &y) { 20 | val = y.val; 21 | num_copyassign++; 22 | return *this; 23 | } 24 | Node& Node::operator=(Node &&y) { 25 | val = y.val; 26 | y.val = 0; 27 | num_moveassign++; 28 | return *this; 29 | } 30 | 31 | void Node::outputResult(int ref_ans) { 32 | std::cout << Node::num_createfunc << " " << Node::num_copyfunc << " " << 33 | Node::num_movefunc << " " << Node::num_copyassign << " " << 34 | Node::num_moveassign << " " << Node::num_delfunc << std::endl; 35 | int tmp = (Node::num_createfunc+Node::num_copyfunc+Node::num_copyassign)*10+Node::num_movefunc+Node::num_moveassign; 36 | if (tmp <= ref_ans) 37 | { 38 | std::cout << "YES" << std::endl; 39 | } 40 | else 41 | { 42 | std::cout << "NO" << std::endl; 43 | } 44 | } 45 | 46 | std::istream& operator>>(std::istream& in, Node& x){ 47 | std::cin >> x.val; 48 | return in; 49 | } 50 | std::ostream& operator<<(std::ostream& out, const Node& x){ 51 | std::cout << x.val; 52 | return out; 53 | } 54 | 55 | -------------------------------------------------------------------------------- /data/22/1/download/Node.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | class Node 5 | { 6 | private: 7 | static int num_createfunc, num_copyfunc, num_movefunc, num_copyassign, num_moveassign, num_delfunc; 8 | int val; 9 | public: 10 | Node(int v = 0); 11 | ~Node(); 12 | Node(const Node &y); 13 | Node(Node &&y); 14 | Node& operator=(const Node &y); 15 | Node& operator=(Node &&y); 16 | friend std::istream& operator>>(std::istream& in, Node& x); 17 | friend std::ostream& operator<<(std::ostream& out, const Node& x); 18 | static void outputResult(int ref_ans); 19 | }; 20 | -------------------------------------------------------------------------------- /data/22/1/download/example_in.txt: -------------------------------------------------------------------------------- 1 | 140 2 | 5 3 | 5 4 | 0 1 5 | 1 2 6 | 2 3 7 | 3 4 8 | 4 5 9 | 3 10 | 0 0 2 11 | 1 1 3 12 | 2 2 7 13 | -------------------------------------------------------------------------------- /data/22/1/download/example_out.txt: -------------------------------------------------------------------------------- 1 | 3 2 3 4 5 2 | 3 4 3 2 5 3 | 3 4 7 3 2 4 | 11 0 1 1 10 12 5 | YES -------------------------------------------------------------------------------- /data/22/1/download/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include "Array.h" 4 | #include "Node.h" 5 | 6 | using namespace std; 7 | 8 | 9 | void outputArray(Array& a, int len) 10 | { 11 | for(int i = 0; i < len-1; i++) 12 | { 13 | cout << a[i] << " "; 14 | } 15 | cout << a[len-1] << endl; 16 | } 17 | 18 | void readArray(Array& a, int n) 19 | { 20 | int pos, value; 21 | for(int i = 0; i < n; i++) 22 | { 23 | cin >> pos >> value; 24 | a[pos] = std::move(Node(value)); 25 | } 26 | } 27 | 28 | 29 | void test() 30 | { 31 | int len, k, n; 32 | int p, q, r; 33 | 34 | cin >> len; 35 | Array a(len); 36 | cin >> n; 37 | readArray(a, n); 38 | 39 | cin >> k; 40 | for (int i=0;i> p >> q >> r; 43 | switch (p) 44 | { 45 | case 0: 46 | a.update(q, r); 47 | break; 48 | case 1: 49 | a.swap(q, r); 50 | break; 51 | case 2: 52 | a.insert(q, r); 53 | break; 54 | default: 55 | break; 56 | } 57 | outputArray(a, len); 58 | } 59 | } 60 | 61 | int main() 62 | { 63 | int ref_ans; 64 | cin >> ref_ans; 65 | test(); 66 | Node::outputResult(ref_ans); 67 | return 0; 68 | } 69 | -------------------------------------------------------------------------------- /data/22/1/input1.txt: -------------------------------------------------------------------------------- 1 | 260 2 | 10 3 | 5 4 | 5 24 5 | 4 10 6 | 3 1 7 | 7 26 8 | 2 3 9 | 10 10 | 0 7 9 11 | 0 4 6 12 | 0 2 7 13 | 0 7 4 14 | 0 6 9 15 | 0 3 0 16 | 0 1 0 17 | 0 6 1 18 | 0 1 1 19 | 0 5 7 20 | -------------------------------------------------------------------------------- /data/22/1/input2.txt: -------------------------------------------------------------------------------- 1 | 250 2 | 10 3 | 8 4 | 6 34 5 | 1 22 6 | 9 39 7 | 3 1 8 | 2 46 9 | 5 0 10 | 4 37 11 | 7 8 12 | 20 13 | 1 8 3 14 | 1 1 5 15 | 1 7 9 16 | 1 5 5 17 | 1 2 4 18 | 1 2 5 19 | 1 2 4 20 | 1 1 3 21 | 1 1 3 22 | 1 7 0 23 | 1 5 9 24 | 1 1 4 25 | 1 0 5 26 | 1 0 7 27 | 1 1 1 28 | 1 2 1 29 | 1 6 6 30 | 1 9 9 31 | 1 4 1 32 | 1 1 8 33 | -------------------------------------------------------------------------------- /data/22/1/input3.txt: -------------------------------------------------------------------------------- 1 | 690 2 | 10 3 | 10 4 | 3 32 5 | 2 6 6 | 8 15 7 | 5 11 8 | 0 20 9 | 6 5 10 | 7 14 11 | 4 9 12 | 1 25 13 | 9 37 14 | 30 15 | 2 9 28 16 | 2 2 35 17 | 2 2 44 18 | 2 9 3 19 | 2 0 33 20 | 2 6 49 21 | 2 6 47 22 | 2 6 8 23 | 2 6 6 24 | 2 6 15 25 | 2 2 44 26 | 2 0 33 27 | 2 7 34 28 | 2 2 44 29 | 2 8 13 30 | 2 5 2 31 | 2 5 12 32 | 2 0 41 33 | 2 0 27 34 | 2 4 14 35 | 2 0 13 36 | 2 2 12 37 | 2 3 10 38 | 2 6 5 39 | 2 7 50 40 | 2 0 42 41 | 2 2 30 42 | 2 7 35 43 | 2 7 14 44 | 2 3 10 45 | -------------------------------------------------------------------------------- /data/22/1/input4.txt: -------------------------------------------------------------------------------- 1 | 4390 2 | 100 3 | 50 4 | 37 880 5 | 62 516 6 | 99 301 7 | 31 220 8 | 23 855 9 | 6 681 10 | 32 716 11 | 53 713 12 | 27 257 13 | 24 78 14 | 18 411 15 | 63 384 16 | 94 46 17 | 75 903 18 | 17 917 19 | 80 999 20 | 34 922 21 | 44 182 22 | 7 543 23 | 49 474 24 | 76 161 25 | 58 183 26 | 90 479 27 | 36 87 28 | 86 574 29 | 68 860 30 | 72 988 31 | 28 303 32 | 4 574 33 | 15 938 34 | 82 200 35 | 41 119 36 | 5 797 37 | 51 930 38 | 70 363 39 | 1 562 40 | 40 986 41 | 35 493 42 | 56 513 43 | 2 419 44 | 20 145 45 | 11 530 46 | 33 352 47 | 48 914 48 | 77 24 49 | 16 508 50 | 3 973 51 | 69 252 52 | 12 687 53 | 89 989 54 | 100 55 | 1 45 2 56 | 1 76 99 57 | 2 5 541 58 | 0 24 6 59 | 0 85 6 60 | 1 17 72 61 | 1 14 56 62 | 2 72 907 63 | 1 26 84 64 | 0 72 9 65 | 1 77 26 66 | 0 17 30 67 | 0 25 79 68 | 0 37 2 69 | 0 23 3 70 | 1 26 89 71 | 1 65 78 72 | 0 13 10 73 | 0 65 39 74 | 2 90 547 75 | 0 94 85 76 | 1 72 99 77 | 1 73 9 78 | 2 60 875 79 | 2 50 497 80 | 2 74 190 81 | 0 66 36 82 | 1 9 97 83 | 2 1 684 84 | 1 39 39 85 | 1 72 86 86 | 2 12 759 87 | 0 53 4 88 | 2 92 861 89 | 1 48 21 90 | 0 92 63 91 | 1 78 33 92 | 0 40 64 93 | 2 54 304 94 | 2 83 547 95 | 2 42 582 96 | 1 48 49 97 | 2 66 234 98 | 1 69 50 99 | 2 1 255 100 | 1 61 56 101 | 2 77 13 102 | 0 25 2 103 | 0 12 1 104 | 2 17 714 105 | 0 79 95 106 | 2 58 742 107 | 1 81 63 108 | 1 46 27 109 | 2 16 589 110 | 1 61 60 111 | 2 45 19 112 | 2 7 15 113 | 2 57 476 114 | 0 6 26 115 | 0 68 89 116 | 1 53 30 117 | 0 71 79 118 | 2 61 322 119 | 1 28 92 120 | 2 91 586 121 | 0 67 95 122 | 1 93 9 123 | 2 17 381 124 | 2 74 207 125 | 1 34 87 126 | 0 92 3 127 | 2 28 418 128 | 0 85 23 129 | 2 75 141 130 | 2 20 635 131 | 2 0 935 132 | 0 76 20 133 | 2 68 649 134 | 2 20 999 135 | 1 30 66 136 | 1 37 70 137 | 1 38 70 138 | 2 0 261 139 | 1 73 73 140 | 1 52 90 141 | 2 82 615 142 | 0 3 55 143 | 0 47 28 144 | 0 97 5 145 | 2 83 36 146 | 2 78 34 147 | 2 32 270 148 | 0 69 10 149 | 1 22 46 150 | 1 95 59 151 | 0 78 89 152 | 2 12 256 153 | 2 15 154 154 | 1 42 96 155 | -------------------------------------------------------------------------------- /data/22/1/input5.txt: -------------------------------------------------------------------------------- 1 | 3920 2 | 100 3 | 80 4 | 78 472 5 | 79 86 6 | 24 239 7 | 80 755 8 | 33 997 9 | 22 850 10 | 45 203 11 | 21 460 12 | 96 176 13 | 81 921 14 | 66 95 15 | 32 921 16 | 39 673 17 | 94 29 18 | 71 394 19 | 88 689 20 | 19 264 21 | 20 940 22 | 48 990 23 | 93 949 24 | 63 379 25 | 23 314 26 | 57 887 27 | 13 96 28 | 97 316 29 | 67 531 30 | 53 566 31 | 5 199 32 | 42 631 33 | 6 958 34 | 0 868 35 | 30 426 36 | 60 604 37 | 65 926 38 | 72 645 39 | 26 844 40 | 75 206 41 | 90 777 42 | 1 844 43 | 61 786 44 | 83 669 45 | 10 559 46 | 85 827 47 | 74 104 48 | 56 242 49 | 27 885 50 | 64 622 51 | 34 1 52 | 4 275 53 | 91 298 54 | 9 543 55 | 87 102 56 | 29 233 57 | 28 617 58 | 8 165 59 | 25 319 60 | 49 819 61 | 99 798 62 | 36 360 63 | 50 943 64 | 7 968 65 | 44 69 66 | 59 202 67 | 70 688 68 | 86 176 69 | 92 663 70 | 95 515 71 | 51 941 72 | 38 862 73 | 47 135 74 | 37 631 75 | 68 509 76 | 16 341 77 | 2 652 78 | 76 715 79 | 46 32 80 | 3 454 81 | 77 415 82 | 84 513 83 | 82 697 84 | 100 85 | 1 94 27 86 | 2 72 437 87 | 1 30 55 88 | 0 27 89 89 | 2 58 513 90 | 0 75 94 91 | 1 6 39 92 | 2 13 444 93 | 1 45 78 94 | 0 93 16 95 | 0 58 65 96 | 1 63 84 97 | 0 77 30 98 | 1 65 40 99 | 0 44 3 100 | 2 89 685 101 | 0 61 19 102 | 1 94 52 103 | 1 26 33 104 | 1 27 11 105 | 0 67 80 106 | 2 36 196 107 | 1 56 30 108 | 2 95 453 109 | 1 99 71 110 | 0 70 44 111 | 0 77 38 112 | 1 59 49 113 | 1 50 51 114 | 0 92 0 115 | 0 99 38 116 | 2 51 318 117 | 0 46 6 118 | 2 74 217 119 | 2 58 524 120 | 0 47 62 121 | 1 65 21 122 | 0 57 72 123 | 1 13 22 124 | 0 15 97 125 | 2 23 307 126 | 0 80 95 127 | 0 49 51 128 | 0 96 24 129 | 1 13 84 130 | 1 95 83 131 | 2 16 223 132 | 1 65 64 133 | 0 4 84 134 | 2 80 931 135 | 1 74 62 136 | 1 97 26 137 | 2 97 212 138 | 0 15 57 139 | 1 92 94 140 | 1 17 35 141 | 0 52 42 142 | 2 10 901 143 | 2 10 760 144 | 2 0 995 145 | 0 49 83 146 | 2 40 874 147 | 0 34 65 148 | 1 0 8 149 | 0 1 38 150 | 1 82 53 151 | 0 39 16 152 | 1 35 26 153 | 0 36 26 154 | 0 22 88 155 | 1 88 68 156 | 1 17 15 157 | 1 1 45 158 | 0 3 3 159 | 0 62 43 160 | 2 76 335 161 | 1 77 75 162 | 0 84 61 163 | 2 46 394 164 | 2 19 831 165 | 1 11 14 166 | 1 10 42 167 | 0 85 2 168 | 1 23 71 169 | 2 3 772 170 | 0 90 45 171 | 2 46 396 172 | 2 73 769 173 | 2 63 232 174 | 2 97 526 175 | 1 47 42 176 | 2 72 863 177 | 0 94 50 178 | 0 4 35 179 | 1 9 94 180 | 0 67 68 181 | 0 61 54 182 | 1 10 50 183 | 0 61 29 184 | 1 82 0 185 | -------------------------------------------------------------------------------- /data/22/1/judger: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | #coding=utf-8 3 | 4 | import sys 5 | import os 6 | 7 | import judger_class_lib as lib 8 | from uoj_judger_compiler import * 9 | from uoj_judger_tester import * 10 | from uoj_judger_reporter import * 11 | from uoj_judger_config import * 12 | 13 | class MyChecker(): 14 | 15 | def run(self, config, tester): 16 | ret = lib.run_program( \ 17 | main_path=config.main_path, \ 18 | result_file_name=config.result_path + "/run_checker_result.txt", \ 19 | input_file_name="/dev/null", \ 20 | output_file_name="/dev/null", \ 21 | error_file_name=config.result_path + "/checker_error.txt", \ 22 | work_path=config.work_path, \ 23 | limit=lib.conf_run_limit("checker", index=tester.num, val=lib.RL_CHECKER_DEFAULT, config=config), \ 24 | readable=[tester.input_file_name, \ 25 | tester.output_file_name, \ 26 | tester.answer_file_name, 27 | ], \ 28 | para_list=["python3.4",\ 29 | config.data_path + "/checker.py",\ 30 | os.path.abspath(tester.input_file_name), \ 31 | os.path.abspath(tester.output_file_name), \ 32 | os.path.abspath(tester.answer_file_name), \ 33 | ], \ 34 | uoj_offline=("uoj_offline" in config.config)) 35 | if ret.type!=lib.RS_AC or ret.exit_code!=0: 36 | return lib.RunCheckerResult(type=ret.type, usm=ret.usm, ust=ret.ust, scr=0, \ 37 | info=lib.file_preview(config.result_path + "/checker_error.txt")) 38 | else: 39 | R = lib.RunCheckerResult(type=ret.type, usm=ret.usm, ust=ret.ust, scr=0, \ 40 | info=lib.file_preview(config.result_path + "/checker_error.txt")) 41 | try: 42 | F = lib.file_preview(config.result_path + "/checker_error.txt") 43 | ret.info = F 44 | E = F.split() 45 | if E[0] == "ok": 46 | R.scr = 100 47 | elif E[0] == 'points': 48 | R.scr = (int)(100 * float(E[1]) + 0.5) 49 | else: 50 | R.scr = 0 51 | return R 52 | except: 53 | print("orz") 54 | return lib.RunCheckerResult(type=lib.RS_JGF, ust=-1, usm=-1, scr=0, info="Checker Judgment Failed") 55 | 56 | if __name__=="__main__": 57 | main_path = sys.argv[1] 58 | work_path = sys.argv[2] 59 | result_path = sys.argv[3] 60 | data_path = sys.argv[4] 61 | 62 | C = pyjudgerConfig(main_path, work_path, result_path, data_path) 63 | n = int(C.config["n_tests"]) 64 | R = pyjudgerReporter(C, n) 65 | Co = pyjudgerCompiler(C) 66 | T = pyjudger_custom_tester(C, checker=MyChecker()) 67 | 68 | R.report_judgement_status("Compiling") 69 | ret = Co.compile_command("/usr/bin/make") 70 | if not ret.succeeded: 71 | R.end_judge_compile_error(info=lib.file_preview(result_path + "/compiler_result.txt")) 72 | 73 | for i in range(n): 74 | t = i + 1 75 | R.report_judgement_status("Judging #%d" % t) 76 | ret = T.test(t) 77 | R.add_point_info(ret) 78 | 79 | R.end_judge_ok() 80 | -------------------------------------------------------------------------------- /data/22/1/output1.txt: -------------------------------------------------------------------------------- 1 | 0 0 3 1 10 24 0 0 0 0 2 | 0 0 3 1 0 24 0 0 0 0 3 | 0 0 0 1 0 24 0 0 0 0 4 | 0 0 0 1 0 24 0 0 0 0 5 | 0 0 0 1 0 24 0 0 0 0 6 | 0 0 0 0 0 24 0 0 0 0 7 | 0 0 0 0 0 24 0 0 0 0 8 | 0 0 0 0 0 24 0 0 0 0 9 | 0 0 0 0 0 24 0 0 0 0 10 | 0 0 0 0 0 0 0 0 0 0 11 | 15 0 0 10 5 15 12 | YES 13 | -------------------------------------------------------------------------------- /data/22/1/output2.txt: -------------------------------------------------------------------------------- 1 | 0 22 46 0 37 0 34 8 1 39 2 | 0 0 46 0 37 22 34 8 1 39 3 | 0 0 46 0 37 22 34 39 1 8 4 | 0 0 46 0 37 22 34 39 1 8 5 | 0 0 37 0 46 22 34 39 1 8 6 | 0 0 22 0 46 37 34 39 1 8 7 | 0 0 46 0 22 37 34 39 1 8 8 | 0 0 46 0 22 37 34 39 1 8 9 | 0 0 46 0 22 37 34 39 1 8 10 | 39 0 46 0 22 37 34 0 1 8 11 | 39 0 46 0 22 8 34 0 1 37 12 | 39 22 46 0 0 8 34 0 1 37 13 | 8 22 46 0 0 39 34 0 1 37 14 | 0 22 46 0 0 39 34 8 1 37 15 | 0 22 46 0 0 39 34 8 1 37 16 | 0 46 22 0 0 39 34 8 1 37 17 | 0 46 22 0 0 39 34 8 1 37 18 | 0 46 22 0 0 39 34 8 1 37 19 | 0 0 22 0 46 39 34 8 1 37 20 | 0 1 22 0 46 39 34 8 0 37 21 | 18 0 20 0 48 38 22 | YES 23 | -------------------------------------------------------------------------------- /data/22/1/output3.txt: -------------------------------------------------------------------------------- 1 | 20 25 6 32 9 11 5 14 15 28 2 | 20 25 35 6 32 9 11 5 14 15 3 | 20 25 44 35 6 32 9 11 5 14 4 | 20 25 44 35 6 32 9 11 5 3 5 | 33 20 25 44 35 6 32 9 11 5 6 | 33 20 25 44 35 6 49 32 9 11 7 | 33 20 25 44 35 6 47 49 32 9 8 | 33 20 25 44 35 6 8 47 49 32 9 | 33 20 25 44 35 6 6 8 47 49 10 | 33 20 25 44 35 6 15 6 8 47 11 | 33 20 44 25 44 35 6 15 6 8 12 | 33 33 20 44 25 44 35 6 15 6 13 | 33 33 20 44 25 44 35 34 6 15 14 | 33 33 44 20 44 25 44 35 34 6 15 | 33 33 44 20 44 25 44 35 13 34 16 | 33 33 44 20 44 2 25 44 35 13 17 | 33 33 44 20 44 12 2 25 44 35 18 | 41 33 33 44 20 44 12 2 25 44 19 | 27 41 33 33 44 20 44 12 2 25 20 | 27 41 33 33 14 44 20 44 12 2 21 | 13 27 41 33 33 14 44 20 44 12 22 | 13 27 12 41 33 33 14 44 20 44 23 | 13 27 12 10 41 33 33 14 44 20 24 | 13 27 12 10 41 33 5 33 14 44 25 | 13 27 12 10 41 33 5 50 33 14 26 | 42 13 27 12 10 41 33 5 50 33 27 | 42 13 30 27 12 10 41 33 5 50 28 | 42 13 30 27 12 10 41 35 33 5 29 | 42 13 30 27 12 10 41 14 35 33 30 | 42 13 30 10 27 12 10 41 14 35 31 | 50 0 0 0 188 50 32 | YES 33 | -------------------------------------------------------------------------------- /data/22/1/problem.conf: -------------------------------------------------------------------------------- 1 | n_tests 5 2 | execute_name main 3 | time_limit 1 4 | memory_limit 256 5 | output_limit 64 6 | use_python_judger on 7 | input_pre input 8 | input_suf txt 9 | output_pre output 10 | output_suf txt 11 | version 1 -------------------------------------------------------------------------------- /data/22/1/require/Makefile: -------------------------------------------------------------------------------- 1 | main: main.cpp Array.cpp Node.cpp Array.h Node.h 2 | g++ main.cpp Array.cpp Node.cpp -o main -std=c++11 -------------------------------------------------------------------------------- /data/22/1/require/Node.cpp: -------------------------------------------------------------------------------- 1 | #include "Node.h" 2 | 3 | int Node::num_createfunc = 0, Node::num_copyfunc = 0, Node::num_movefunc = 0; 4 | int Node::num_copyassign = 0, Node::num_moveassign = 0, Node::num_delfunc = 0; 5 | 6 | Node::Node(int v): val(v) { 7 | num_createfunc++; 8 | } 9 | Node::~Node() { 10 | num_delfunc++; 11 | } 12 | Node::Node(const Node &y): val(y.val) { 13 | num_copyfunc++; 14 | } 15 | Node::Node(Node &&y): val(y.val) { 16 | y.val = 0; 17 | num_movefunc++; 18 | } 19 | Node& Node::operator=(const Node &y) { 20 | val = y.val; 21 | num_copyassign++; 22 | return *this; 23 | } 24 | Node& Node::operator=(Node &&y) { 25 | val = y.val; 26 | y.val = 0; 27 | num_moveassign++; 28 | return *this; 29 | } 30 | 31 | void Node::outputResult(int ref_ans) { 32 | std::cout << Node::num_createfunc << " " << Node::num_copyfunc << " " << 33 | Node::num_movefunc << " " << Node::num_copyassign << " " << 34 | Node::num_moveassign << " " << Node::num_delfunc << std::endl; 35 | int tmp = (Node::num_createfunc+Node::num_copyfunc+Node::num_copyassign)*10+Node::num_movefunc+Node::num_moveassign; 36 | if (tmp <= ref_ans) 37 | { 38 | std::cout << "YES" << std::endl; 39 | } 40 | else 41 | { 42 | std::cout << "NO" << std::endl; 43 | } 44 | } 45 | 46 | std::istream& operator>>(std::istream& in, Node& x){ 47 | std::cin >> x.val; 48 | return in; 49 | } 50 | std::ostream& operator<<(std::ostream& out, const Node& x){ 51 | std::cout << x.val; 52 | return out; 53 | } 54 | 55 | -------------------------------------------------------------------------------- /data/22/1/require/Node.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | class Node 5 | { 6 | private: 7 | static int num_createfunc, num_copyfunc, num_movefunc, num_copyassign, num_moveassign, num_delfunc; 8 | int val; 9 | public: 10 | Node(int v = 0); 11 | ~Node(); 12 | Node(const Node &y); 13 | Node(Node &&y); 14 | Node& operator=(const Node &y); 15 | Node& operator=(Node &&y); 16 | friend std::istream& operator>>(std::istream& in, Node& x); 17 | friend std::ostream& operator<<(std::ostream& out, const Node& x); 18 | static void outputResult(int ref_ans); 19 | }; 20 | -------------------------------------------------------------------------------- /data/22/1/require/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include "Array.h" 4 | #include "Node.h" 5 | 6 | using namespace std; 7 | 8 | 9 | void outputArray(Array& a, int len) 10 | { 11 | for(int i = 0; i < len-1; i++) 12 | { 13 | cout << a[i] << " "; 14 | } 15 | cout << a[len-1] << endl; 16 | } 17 | 18 | void readArray(Array& a, int n) 19 | { 20 | int pos, value; 21 | for(int i = 0; i < n; i++) 22 | { 23 | cin >> pos >> value; 24 | a[pos] = std::move(Node(value)); 25 | } 26 | } 27 | 28 | 29 | void test() 30 | { 31 | int len, k, n; 32 | int p, q, r; 33 | 34 | cin >> len; 35 | Array a(len); 36 | cin >> n; 37 | readArray(a, n); 38 | 39 | cin >> k; 40 | for (int i=0;i> p >> q >> r; 43 | switch (p) 44 | { 45 | case 0: 46 | a.update(q, r); 47 | break; 48 | case 1: 49 | a.swap(q, r); 50 | break; 51 | case 2: 52 | a.insert(q, r); 53 | break; 54 | default: 55 | break; 56 | } 57 | outputArray(a, len); 58 | } 59 | } 60 | 61 | int main() 62 | { 63 | int ref_ans; 64 | cin >> ref_ans; 65 | test(); 66 | Node::outputResult(ref_ans); 67 | return 0; 68 | } 69 | -------------------------------------------------------------------------------- /data/22/1/text.md: -------------------------------------------------------------------------------- 1 | ### 题目描述 2 | 3 | 本题需要你在[给定代码](/download.php?type=problem&id=22)的基础上,实现类`Array` 来完成以下基本操作: 4 | 5 | 1.**更新(update)**:用数组中指定元素的值来更新另一指定元素的值; 6 | 7 | 2.**交换(swap)**:交换数组中某两个指定元素的位置; 8 | 9 | 3.**插入(insert)**:在数组中的指定位置插入新的元素,其他元素顺次右移。 10 | 11 | 数组长度会在`Array`类构造时给定,且在整个过程中不发生变化。`Array`类的元素为`Node`类的对象,具体可见下载文件中的`Node.h`和`Node.cpp`。 12 | 13 | 我们将使用测试函数来判断你的实现是否正确,样例测试代码见`main.cpp`的`test`函数,该函数从标准输入读入,处理并产生相应输出,最后由输出结果判定你的结果是否正确。 14 | 15 | 在`test`函数结束时,我们会调用`Node::outputResult()`函数来输出所有`Node`类对象的**普通构造**、**拷贝构造**、**移动构造**、**拷贝赋值**、**移动赋值**、**析构**的次数,该次数将用于验证实现的正确性和效率。实现正确的`Array`类不应存在内存泄漏,即满足: 16 | 17 | $普通构造+拷贝构造+移动构造=析构​$ 18 | 19 | 由于普通构造、拷贝构造和拷贝赋值操作消耗时间较长,移动构造和移动赋值消耗时间较短,我们将使用如下公式简单地验证效率: 20 | 21 | $(普通构造+拷贝构造+拷贝赋值)*10+(移动构造+移动赋值)\leq 参考答案​$ 22 | 23 | 我们将按照如下方式对你的程序评分: 24 | 25 | 1.程序输出结果正确,但存在内存泄漏,获得50%的分数; 26 | 27 | 2.程序输出结果正确,不存在内存泄漏,但效率不满足要求,获得70%的分数; 28 | 29 | 3.程序输出结果正确,不存在内存泄漏,且满足效率要求,获得100%的分数。 30 | 31 | 提示:只要合理利用移动构造和移动赋值,即可通过效率测试。 32 | 33 | 34 | 35 | ### 输入样例 36 | 37 | 第一行包含一个正整数$ref\_ans$,表示效率的参考值。 38 | 39 | 第二行包括一个正整数 $n$,表示数组的长度,所有元素的默认值为$0$。 40 | 41 | 第三行包含一个正整数$m$,表示数组中需要初始化的位置和值。 42 | 43 | 接下来$m​$行,每行2个正整数$a_l,b_l(1\leq l \leq m)​$,表示第$a_l​$个位置的初始值为$b_l​$。 44 | 45 | 第$m+4$行包含一个正整数$k​$,表示操作的个数。 46 | 47 | 接下来的$k$行,每行三个整数$p_j,q_j,r_j(1\leq j \leq k)$,表示操作的参数: 48 | 49 | 当$p_j=0$时,该操作为更新,用数组中第$r_j$个元素的值来更新第$q_j$个元素。 50 | 51 | 当$p_j=1$时,该操作为交换,将数组中第$q_j​$个元素和第$r_j​$个元素交换位置。 52 | 53 | 当$p_j=2$时,该操作为插入,将$r_j$插入至数组的第$q_j$个位置,并且将后面的元素顺次右移。 54 | 55 | 样例输入见`example_in.txt`。 56 | 57 |
 58 | 140
 59 | 5
 60 | 5
 61 | 0 1
 62 | 1 2
 63 | 2 3
 64 | 3 4
 65 | 4 5 //数组的初始值为1 2 3 4 5
 66 | 3
 67 | 0 0 2 //用数组中第2个位置的元素值类更新第0个元素的值,此时数组为3 2 3 4 5
 68 | 1 1 3 //交换数组第1个元素和第3个元素的位置,此时数组为3 4 3 2 5
 69 | 2 2 7 //在数组的第2个位置插入7,原来的第2和第3个位置后移一位,此时数组为3 4 7 3 2
 70 | 
 71 | 
72 | 73 | 74 | 75 | ### 输出样例 76 | 77 | 前$k$行每行包含$n$个整数,表示每个操作结束后数组的所有元素,用空格隔开(行尾无空格)。 78 | 79 | 第$k+1$行包含$6$个整数,即Node类对象普通构造**、**拷贝构造**、**移动构造**、**拷贝赋值**、**移动赋值**、**析构的次数。不同的实现方式可能会带来不同的结果,评测时该行结果不要求和标准输出完全一致。 80 | 81 | 第$k+2​$行包含一个字符串,**YES**表示符合效率要求,**NO**表示不符合效率要求。 82 | 83 | 完整输出见 `example_out.txt` 84 | 85 |
 86 | 3 2 3 4 5
 87 | 3 4 3 2 5
 88 | 3 4 7 3 2
 89 | 11 0 1 1 10 12 
 90 | YES
 91 | 
 92 | 
93 | 94 | 95 | 96 | ### 数据范围 97 | 98 | $1 \leq n,k \leq 100​$ 99 | 100 | $0 \leq a_i \leq 1000$ 101 | 102 | 输入保证所有的操作均合法。 103 | 104 | **时间限制:1s** 105 | 106 | **空间限制:256MB** 107 | 108 | 109 | 110 | ### 提交格式 111 | 112 | 在已有代码基础上编写`Array.h`和`Array.cpp`并分别提交,要求能和下载文件中的其他代码共同编译。 113 | 114 | 115 | 116 | ### 评分标准 117 | 118 | OJ评分占100%。 -------------------------------------------------------------------------------- /data/22/1/uoj_judger_compiler.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import judger_class_lib as lib 3 | 4 | class pyjudgerCompiler(object): 5 | def __init__(self, config): 6 | self.config = config 7 | 8 | def run_compiler(self, path, arg): 9 | argv = ["--type=compiler", "--work-path=" + path] 10 | argv.extend(arg) 11 | 12 | ret = lib.run_program( \ 13 | main_path=self.config.main_path, \ 14 | work_path=self.config.work_path, \ 15 | result_file_name=self.config.result_path + "/run_compiler_result.txt", \ 16 | input_file_name="/dev/null", \ 17 | output_file_name="stderr", \ 18 | error_file_name=self.config.result_path + "/compiler_result.txt", \ 19 | limit=lib.RL_COMPILER_DEFAULT, \ 20 | para_list=argv, \ 21 | uoj_offline=("uoj_offline" in self.config.config)) 22 | res = lib.RunCompilerResult(type=ret.type, ust=ret.ust, usm=ret.usm, \ 23 | succeeded=(ret.type == lib.RS_AC) and (ret.exit_code == 0)) 24 | if not res.succeeded: 25 | if res.type == lib.RS_AC: 26 | res.info = lib.file_preview(self.config.result_path + "/compiler_result.txt", 500) 27 | elif res.type == lib.RS_JGF: 28 | res.info = "No Comment" 29 | else: 30 | res.info = "Compiler " + lib.info_str(res.type) 31 | return res 32 | 33 | def compile_cpp(self, name, path=None): 34 | path = path or self.config.work_path 35 | argv = ["/usr/bin/g++", "-o", name, "-x", "c++", "answer.code", "-std=c++11", "-lm", "-O2", "-DONLINE_JUDGE"] 36 | return self.run_compiler(path, argv) 37 | 38 | def compile_command(self, para, path=None): 39 | path = path or self.config.work_path 40 | argv = para.split(' ') 41 | return self.run_compiler(path, argv) 42 | 43 | def compile(self, para): 44 | name = para 45 | if name + '_language' in self.config.config: 46 | lang = self.config.config[name + '_language'] 47 | print("has a language :", lang) 48 | #TODO check language type 49 | return self.compile_cpp(name) 50 | else: 51 | return self.compile_cpp(name) 52 | 53 | # if __name__ == "__main__": 54 | # def test(): 55 | # C = pyjudgerConfig() 56 | # os.chdir(C.work_path) 57 | # my_compiler = pyjudgerCompiler(C) 58 | # #以下是两种编译方法 59 | # #1. 默认编译 60 | # my_compiler.compile("main") 61 | # #2. 使用 g++ 或者 g++-4.8 或者直接用 /usr/bin/g++-4.8 62 | # #my_compiler.custom_compile("g++ -o main -x c++ main.code -lm -O2 -DONLINE_JUDGE") 63 | # test() 64 | -------------------------------------------------------------------------------- /data/22/1/uoj_judger_config.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import os 3 | class pyjudgerConfig: 4 | def __init__(self, main_path, work_path, result_path, data_path): 5 | self.config = dict() 6 | 7 | def load_config(config_file): 8 | configs = open(config_file, 'r').readlines() 9 | for each_config in configs: 10 | key, value = each_config.strip('\n').strip('\r').split(' ') 11 | self.config[key] = value 12 | 13 | self.main_path = main_path 14 | self.work_path = work_path 15 | self.result_path = result_path 16 | load_config(self.work_path + "/submission.conf") 17 | self.problem_id = self.config['problem_id'] 18 | self.data_path = data_path 19 | load_config(self.data_path + "/problem.conf") 20 | self.exec_file_name = "./main" 21 | 22 | #exec("cp %s/require/* %s 2>/dev/null"%(self.__data_path, self.__work_path)) 23 | 24 | #这里可以修改 25 | if "use_builtin_checker" in self.config: 26 | self.config["checker"] = self.main_path + "/builtin/checker/" + self.config["use_builtin_checker"] 27 | else: 28 | self.config["checker"] = self.data_path + "/chk" 29 | self.config["validator"] = self.data_path + "/val" 30 | 31 | #os.chdir(self.work_path) 32 | -------------------------------------------------------------------------------- /data/22/1/uoj_judger_reporter.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | from uoj_judger_config import * 3 | import judger_class_lib as lib 4 | import fcntl 5 | 6 | class pyjudgerReporter: 7 | def __init__(self, config, test_num): 8 | self.config = config 9 | self.tot_time = 0 10 | self.max_memory = 0 11 | self.details_out = "" 12 | self.tot_score = 0 13 | self.test_num = test_num 14 | 15 | def report_judgement_status(self, info): 16 | print(self.config.result_path+"/cur_status.txt") 17 | F = open(self.config.result_path+"/cur_status.txt", "w") 18 | fcntl.flock(F.fileno(), fcntl.LOCK_EX) 19 | F.write(info[:512]) 20 | 21 | def add_point_info(self, info): 22 | if info.ust >= 0: 23 | self.tot_time += info.ust 24 | if info.usm >= self.max_memory: 25 | self.max_memory = info.usm 26 | self.details_out += ""\ 27 | % (info.num, info.scr / self.test_num, info.info, info.ust, info.usm) 28 | self.tot_score += info.scr / self.test_num 29 | if info.input: 30 | self.details_out += "%s" % (lib.htmlspecialchars(info.input)) 31 | if info.output: 32 | self.details_out += "%s" % (lib.htmlspecialchars(info.output)) 33 | if info.res: 34 | self.details_out += "%s" % (lib.htmlspecialchars(info.res)) 35 | if info.extrainfo: 36 | self.details_out += info.extrainfo 37 | self.details_out += "\n" 38 | 39 | def add_subtask_info(self, subTaskIndex, scr=0, info="", points=None): 40 | self.details_out += "\n") 58 | F.write(self.details_out) 59 | F.write("\n") 60 | F.close() 61 | exit(0) 62 | 63 | def end_judge_judgement_failed(self, info=""): 64 | F = open(self.config.result_path+"/result.txt", "w") 65 | F.write("error Judgment Failed\n") 66 | F.write("details\n") 67 | F.write("%s\n" % lib.htmlspecialchars(info)) 68 | F.close() 69 | exit(0) 70 | 71 | def end_judge_compile_error(self, info=""): 72 | F = open(self.config.result_path+"/result.txt", "w") 73 | F.write("error Compile Error\n") 74 | F.write("details\n") 75 | F.write("%s\n" % lib.htmlspecialchars(info)) 76 | F.close() 77 | exit(0) 78 | 79 | def end_judge_custom_error(self, label, info=""): 80 | F = open(self.config.result_path+"/result.txt", "w") 81 | F.write("error %s\n" % label) 82 | F.write("details\n") 83 | F.write("%s\n" % lib.htmlspecialchars(info)) 84 | F.close() 85 | exit(0) 86 | -------------------------------------------------------------------------------- /data/24/1/Makefile: -------------------------------------------------------------------------------- 1 | export INCLUDE_PATH 2 | CXXFLAGS = -I$(INCLUDE_PATH) -O2 -std=c++11 3 | 4 | all: 5 | chmod +x judger -------------------------------------------------------------------------------- /data/24/1/data1.in: -------------------------------------------------------------------------------- 1 | 100 2 | 3 12 Tuesday 3 | 4 24 Subday 4 | 7 4 Saturday 5 | 7 25 Wednesday 6 | 1 9 Subday 7 | 8 23 Monday 8 | 1 4 Thursday 9 | 4 2 Monday 10 | 10 13 Monday 11 | 8 21 Monday 12 | 1 11 Thursday 13 | 1 16 Saturday 14 | 6 22 Monday 15 | 11 16 Tuesday 16 | 10 2 Monday 17 | 6 27 Friday 18 | 6 14 Tuesday 19 | 9 3 Monday 20 | 4 11 Thursday 21 | 9 27 Thursday 22 | 4 12 Tuesday 23 | 10 8 Saturday 24 | 1 25 Subday 25 | 5 10 Wednesday 26 | 1 6 Subday 27 | 4 15 Tuesday 28 | 3 7 Monday 29 | 1 28 Saturday 30 | 4 4 Thursday 31 | 3 3 Wednesday 32 | 12 5 Subday 33 | 3 15 Monday 34 | 7 28 Monday 35 | 9 7 Wednesday 36 | 7 16 Tuesday 37 | 3 6 Wednesday 38 | 1 23 Subday 39 | 6 28 Subday 40 | 5 11 Monday 41 | 1 14 Friday 42 | 10 22 Saturday 43 | 12 4 Wednesday 44 | 3 19 Thursday 45 | 1 5 Thursday 46 | 4 14 Subday 47 | 3 14 Thursday 48 | 11 12 Monday 49 | 8 11 Thursday 50 | 8 15 Wednesday 51 | 10 19 Tuesday 52 | 4 7 Wednesday 53 | 2 9 Thursday 54 | 10 4 Saturday 55 | 12 27 Monday 56 | 3 1 Tuesday 57 | 7 2 Friday 58 | 5 22 Subday 59 | 5 5 Thursday 60 | 12 17 Tuesday 61 | 2 4 Thursday 62 | 7 3 Subday 63 | 10 12 Friday 64 | 9 2 Wednesday 65 | 5 4 Friday 66 | 4 6 Monday 67 | 5 9 Thursday 68 | 10 21 Wednesday 69 | 11 11 Tuesday 70 | 9 28 Monday 71 | 10 24 Saturday 72 | 4 16 Subday 73 | 11 2 Saturday 74 | 6 13 Saturday 75 | 8 5 Saturday 76 | 11 7 Thursday 77 | 5 2 Wednesday 78 | 8 19 Saturday 79 | 3 5 Friday 80 | 5 17 Subday 81 | 7 20 Subday 82 | 6 18 Thursday 83 | 3 11 Friday 84 | 11 4 Friday 85 | 4 17 Subday 86 | 12 2 Saturday 87 | 8 18 Thursday 88 | 2 8 Wednesday 89 | 4 22 Wednesday 90 | 10 26 Saturday 91 | 2 14 Saturday 92 | 3 10 Thursday 93 | 11 5 Saturday 94 | 1 20 Wednesday 95 | 11 23 Thursday 96 | 8 6 Tuesday 97 | 3 24 Subday 98 | 7 1 Friday 99 | 5 8 Wednesday 100 | 12 12 Monday 101 | 2 26 Tuesday 102 | 100 103 | 3 6 MLSVXWAGX15L5JN 104 | 11 11 XMEW3LFR2BFHTI5 105 | 1 25 L7UQETH701CKA02 106 | 8 15 Y5KJOUK93NZTV1T 107 | 8 15 HQVR7EBXEYD0G1A 108 | 1 14 BM829QT9WZBTWHH 109 | 10 26 TJBIGXSC5GMTUCW 110 | 10 12 X7BTK2LWJBWCPZ3 111 | 12 27 F7LULBIQTNSAZQM 112 | 1 23 VJDOTU45EKYHY7L 113 | 4 7 7R80GQ09ZWPO3CA 114 | 11 23 D24P2XC30KNG4JN 115 | 7 28 CE97FANEN1TZP26 116 | 5 11 M7N4FJG67VCVBTC 117 | 7 28 DHQJUE0N1PXJODF 118 | 4 15 LSZQSN6G4Y4NAWN 119 | 12 12 SQTHI1MB92W5P8L 120 | 2 26 PF01G3TYPDICXDJ 121 | 7 28 6XDAE4PDAHKFSIG 122 | 5 17 Y1VW1JSAWKB4D4V 123 | 3 10 BDI91EYNPLIFA83 124 | 10 4 A4SI8QNO0DYMPWT 125 | 2 9 S18CIV8HRF9IF8Q 126 | 10 2 WRUR7C5LXERVJBL 127 | 12 4 RG316NJ5NSSXQKL 128 | 10 22 ETPFGQAK3XW9T8V 129 | 5 17 29CHIQFMMR1ETHC 130 | 9 27 ND8TDZ6CVD1QCW0 131 | 7 4 I82W4O6640IZQGF 132 | 3 5 6TCZ5RNIRDH598F 133 | 9 27 7KEOYUECYKCWILG 134 | 3 11 HYHY8L402NXQIP5 135 | 8 18 QFYWG8U4GD71YV2 136 | 7 28 A8BNYXZTT3KLZ49 137 | 5 9 J0MXN68T4EXIK64 138 | 12 4 EBKA325ZZWMACFL 139 | 10 4 N8L4I8LM1KJS1ZZ 140 | 3 24 W101P13KVILHVEM 141 | 5 11 4817HT3M633QUPA 142 | 1 20 V93X4PX0NGB4PCN 143 | 8 15 9F5SBK1D0H0OOJL 144 | 10 24 C9ZJJSOLVM7UTS2 145 | 7 25 QRACPAII4F7P9Y7 146 | 3 12 7SU6E15SJCQZXIC 147 | 11 2 ALSNDYPI3YHYL71 148 | 11 2 79C09ZC6IKW47D0 149 | 5 17 98RA3SVVZU9ZW0P 150 | 7 28 HWG0LLXXR85RF3Z 151 | 1 20 1WG0G00QXUYW2AM 152 | 3 15 8YSTC7Q55EYS0N1 153 | 3 5 DYG8KXO3UOJXHBG 154 | 5 22 JAKDMCGHKDMA62M 155 | 9 27 L5EDGTM2SUFAPV3 156 | 7 1 M3UOBS43LYJKWXN 157 | 5 4 EL4M1YNTOEQA018 158 | 2 9 XWXYYU02XFFR67W 159 | 12 27 R8D9T7OYDK9CMX4 160 | 11 16 UY469FPVW94F9C7 161 | 1 9 L4QZPR27UTIJCSH 162 | 5 10 VI27RDIIZ2C8T38 163 | 4 22 ASFHAPP78KGHGKC 164 | 10 8 7SDOJ3PE3Z0KHS9 165 | 7 28 VY8ZRD9V5SQTBFK 166 | 5 22 XE6KIJURCMKQ5KF 167 | 10 13 H55LVLOL4X8VKL8 168 | 4 14 JR9H2B27RCTJXSX 169 | 9 27 AHQJHBNR5FNPJC1 170 | 4 12 S196FPPP74PTROM 171 | 12 2 MVUTDSHJJ49WOOQ 172 | 8 23 K85NKDI260JHDA5 173 | 1 25 QJY7QQ2JW3LB7GR 174 | 10 26 OLZE6CO13UE7ACU 175 | 4 11 1256RTSHIW9057S 176 | 10 8 WWI7OV3JFPJV9ZA 177 | 1 16 YEX5CTPX1RFKDH7 178 | 7 28 SPUE9K8124IAMNK 179 | 4 14 QA4MKJ52XXKTCSA 180 | 2 26 DSHRYONUKJFVK7R 181 | 3 24 WID2VSHUPO1PEW7 182 | 3 5 Z0DIALX0V8MCNCS 183 | 5 4 2MOVZ94CA0KIU3H 184 | 3 24 YJK5QC9GXN2R906 185 | 1 14 5IN6J48Y2WF9UXV 186 | 4 4 JOTVFBUECCMWPND 187 | 4 2 7CQSNKFWL7RTEBX 188 | 4 7 YZ5XG75JXBUSA8T 189 | 9 28 UQDW97UG8KCC2YB 190 | 10 19 PW6KQ61VIRSOK59 191 | 4 15 MJ0D2SE7LD343K9 192 | 3 10 43M4FRGB35ES9G9 193 | 1 23 52Q1IQB5JUWXUL1 194 | 2 9 CGRVTYBJ3MFP4K6 195 | 10 22 XER9X0UU7YKYE17 196 | 4 14 3WLGT4TZW94U9U5 197 | 5 9 NJCUSHO071AJRHG 198 | 5 22 G42SJTJO0OPKDRS 199 | 7 2 5BXAGWTIT4YM36D 200 | 4 11 9NWNWG27VUYCEG8 201 | 3 3 K4ZP1GOG89NWQD6 202 | 7 1 TZUH978USQR08V8 203 | -------------------------------------------------------------------------------- /data/24/1/data1.out: -------------------------------------------------------------------------------- 1 | 3/12 Tuesday Today's Plan: 2 | 7SU6E15SJCQZXIC 3 | 4/24 Subday Today is Free 4 | 7/4 Saturday Today's Plan: 5 | I82W4O6640IZQGF 6 | 7/25 Wednesday Today's Plan: 7 | QRACPAII4F7P9Y7 8 | 1/9 Subday Today's Plan: 9 | L4QZPR27UTIJCSH 10 | 8/23 Monday Today's Plan: 11 | K85NKDI260JHDA5 12 | 1/4 Thursday Today is Free 13 | 4/2 Monday Today's Plan: 14 | 7CQSNKFWL7RTEBX 15 | 10/13 Monday Today's Plan: 16 | H55LVLOL4X8VKL8 17 | 8/21 Monday Today is Free 18 | 1/11 Thursday Today is Free 19 | 1/16 Saturday Today's Plan: 20 | YEX5CTPX1RFKDH7 21 | 6/22 Monday Today is Free 22 | 11/16 Tuesday Today's Plan: 23 | UY469FPVW94F9C7 24 | 10/2 Monday Today's Plan: 25 | WRUR7C5LXERVJBL 26 | 6/27 Friday Today is Free 27 | Friday is Free :) 28 | 6/14 Tuesday Today is Free 29 | 9/3 Monday Today is Free 30 | 4/11 Thursday Today's Plan: 31 | 1256RTSHIW9057S 32 | 9NWNWG27VUYCEG8 33 | 9/27 Thursday Today's Plan: 34 | ND8TDZ6CVD1QCW0 35 | 7KEOYUECYKCWILG 36 | L5EDGTM2SUFAPV3 37 | AHQJHBNR5FNPJC1 38 | 4/12 Tuesday Today's Plan: 39 | S196FPPP74PTROM 40 | 10/8 Saturday Today's Plan: 41 | 7SDOJ3PE3Z0KHS9 42 | WWI7OV3JFPJV9ZA 43 | 1/25 Subday Today's Plan: 44 | L7UQETH701CKA02 45 | QJY7QQ2JW3LB7GR 46 | 5/10 Wednesday Today's Plan: 47 | VI27RDIIZ2C8T38 48 | 1/6 Subday Today is Free 49 | 4/15 Tuesday Today's Plan: 50 | LSZQSN6G4Y4NAWN 51 | MJ0D2SE7LD343K9 52 | 3/7 Monday Today is Free 53 | 1/28 Saturday Today is Free 54 | 4/4 Thursday Today's Plan: 55 | JOTVFBUECCMWPND 56 | 3/3 Wednesday Today's Plan: 57 | K4ZP1GOG89NWQD6 58 | 12/5 Subday Today is Free 59 | 3/15 Monday Today's Plan: 60 | 8YSTC7Q55EYS0N1 61 | 7/28 Monday Today's Plan: 62 | CE97FANEN1TZP26 63 | DHQJUE0N1PXJODF 64 | 6XDAE4PDAHKFSIG 65 | A8BNYXZTT3KLZ49 66 | HWG0LLXXR85RF3Z 67 | VY8ZRD9V5SQTBFK 68 | SPUE9K8124IAMNK 69 | 9/7 Wednesday Today is Free 70 | 7/16 Tuesday Today is Free 71 | 3/6 Wednesday Today's Plan: 72 | MLSVXWAGX15L5JN 73 | 1/23 Subday Today's Plan: 74 | VJDOTU45EKYHY7L 75 | 52Q1IQB5JUWXUL1 76 | 6/28 Subday Today is Free 77 | 5/11 Monday Today's Plan: 78 | M7N4FJG67VCVBTC 79 | 4817HT3M633QUPA 80 | 1/14 Friday Today's Plan: 81 | BM829QT9WZBTWHH 82 | 5IN6J48Y2WF9UXV 83 | Friday is Busy :( 84 | 10/22 Saturday Today's Plan: 85 | ETPFGQAK3XW9T8V 86 | XER9X0UU7YKYE17 87 | 12/4 Wednesday Today's Plan: 88 | RG316NJ5NSSXQKL 89 | EBKA325ZZWMACFL 90 | 3/19 Thursday Today is Free 91 | 1/5 Thursday Today is Free 92 | 4/14 Subday Today's Plan: 93 | JR9H2B27RCTJXSX 94 | QA4MKJ52XXKTCSA 95 | 3WLGT4TZW94U9U5 96 | 3/14 Thursday Today is Free 97 | 11/12 Monday Today is Free 98 | 8/11 Thursday Today is Free 99 | 8/15 Wednesday Today's Plan: 100 | Y5KJOUK93NZTV1T 101 | HQVR7EBXEYD0G1A 102 | 9F5SBK1D0H0OOJL 103 | 10/19 Tuesday Today's Plan: 104 | PW6KQ61VIRSOK59 105 | 4/7 Wednesday Today's Plan: 106 | 7R80GQ09ZWPO3CA 107 | YZ5XG75JXBUSA8T 108 | 2/9 Thursday Today's Plan: 109 | S18CIV8HRF9IF8Q 110 | XWXYYU02XFFR67W 111 | CGRVTYBJ3MFP4K6 112 | 10/4 Saturday Today's Plan: 113 | A4SI8QNO0DYMPWT 114 | N8L4I8LM1KJS1ZZ 115 | 12/27 Monday Today's Plan: 116 | F7LULBIQTNSAZQM 117 | R8D9T7OYDK9CMX4 118 | 3/1 Tuesday Today is Free 119 | 7/2 Friday Today's Plan: 120 | 5BXAGWTIT4YM36D 121 | Friday is Busy :( 122 | 5/22 Subday Today's Plan: 123 | JAKDMCGHKDMA62M 124 | XE6KIJURCMKQ5KF 125 | G42SJTJO0OPKDRS 126 | 5/5 Thursday Today is Free 127 | 12/17 Tuesday Today is Free 128 | 2/4 Thursday Today is Free 129 | 7/3 Subday Today is Free 130 | 10/12 Friday Today's Plan: 131 | X7BTK2LWJBWCPZ3 132 | Friday is Busy :( 133 | 9/2 Wednesday Today is Free 134 | 5/4 Friday Today's Plan: 135 | EL4M1YNTOEQA018 136 | 2MOVZ94CA0KIU3H 137 | Friday is Busy :( 138 | 4/6 Monday Today is Free 139 | 5/9 Thursday Today's Plan: 140 | J0MXN68T4EXIK64 141 | NJCUSHO071AJRHG 142 | 10/21 Wednesday Today is Free 143 | 11/11 Tuesday Today's Plan: 144 | XMEW3LFR2BFHTI5 145 | 9/28 Monday Today's Plan: 146 | UQDW97UG8KCC2YB 147 | 10/24 Saturday Today's Plan: 148 | C9ZJJSOLVM7UTS2 149 | 4/16 Subday Today is Free 150 | 11/2 Saturday Today's Plan: 151 | ALSNDYPI3YHYL71 152 | 79C09ZC6IKW47D0 153 | 6/13 Saturday Today is Free 154 | 8/5 Saturday Today is Free 155 | 11/7 Thursday Today is Free 156 | 5/2 Wednesday Today is Free 157 | 8/19 Saturday Today is Free 158 | 3/5 Friday Today's Plan: 159 | 6TCZ5RNIRDH598F 160 | DYG8KXO3UOJXHBG 161 | Z0DIALX0V8MCNCS 162 | Friday is Busy :( 163 | 5/17 Subday Today's Plan: 164 | Y1VW1JSAWKB4D4V 165 | 29CHIQFMMR1ETHC 166 | 98RA3SVVZU9ZW0P 167 | 7/20 Subday Today is Free 168 | 6/18 Thursday Today is Free 169 | 3/11 Friday Today's Plan: 170 | HYHY8L402NXQIP5 171 | Friday is Busy :( 172 | 11/4 Friday Today is Free 173 | Friday is Free :) 174 | 4/17 Subday Today is Free 175 | 12/2 Saturday Today's Plan: 176 | MVUTDSHJJ49WOOQ 177 | 8/18 Thursday Today's Plan: 178 | QFYWG8U4GD71YV2 179 | 2/8 Wednesday Today is Free 180 | 4/22 Wednesday Today's Plan: 181 | ASFHAPP78KGHGKC 182 | 10/26 Saturday Today's Plan: 183 | TJBIGXSC5GMTUCW 184 | OLZE6CO13UE7ACU 185 | 2/14 Saturday Today is Free 186 | 3/10 Thursday Today's Plan: 187 | BDI91EYNPLIFA83 188 | 43M4FRGB35ES9G9 189 | 11/5 Saturday Today is Free 190 | 1/20 Wednesday Today's Plan: 191 | V93X4PX0NGB4PCN 192 | 1WG0G00QXUYW2AM 193 | 11/23 Thursday Today's Plan: 194 | D24P2XC30KNG4JN 195 | 8/6 Tuesday Today is Free 196 | 3/24 Subday Today's Plan: 197 | W101P13KVILHVEM 198 | WID2VSHUPO1PEW7 199 | YJK5QC9GXN2R906 200 | 7/1 Friday Today's Plan: 201 | M3UOBS43LYJKWXN 202 | TZUH978USQR08V8 203 | Friday is Busy :( 204 | 5/8 Wednesday Today is Free 205 | 12/12 Monday Today's Plan: 206 | SQTHI1MB92W5P8L 207 | 2/26 Tuesday Today's Plan: 208 | PF01G3TYPDICXDJ 209 | DSHRYONUKJFVK7R 210 | -------------------------------------------------------------------------------- /data/24/1/data10.in: -------------------------------------------------------------------------------- 1 | 100 2 | 9 20 Monday 3 | 4 6 Subday 4 | 11 17 Subday 5 | 5 14 Friday 6 | 9 6 Monday 7 | 2 19 Tuesday 8 | 2 13 Monday 9 | 4 10 Tuesday 10 | 12 21 Tuesday 11 | 7 27 Monday 12 | 6 28 Tuesday 13 | 7 6 Saturday 14 | 3 26 Saturday 15 | 6 7 Monday 16 | 3 1 Friday 17 | 12 23 Thursday 18 | 10 21 Subday 19 | 7 26 Wednesday 20 | 11 15 Saturday 21 | 4 28 Monday 22 | 9 18 Monday 23 | 3 19 Thursday 24 | 7 16 Tuesday 25 | 10 23 Wednesday 26 | 2 20 Wednesday 27 | 4 8 Wednesday 28 | 3 9 Thursday 29 | 1 16 Saturday 30 | 10 8 Subday 31 | 2 22 Saturday 32 | 2 9 Tuesday 33 | 12 19 Monday 34 | 1 13 Friday 35 | 8 23 Subday 36 | 10 5 Monday 37 | 7 2 Friday 38 | 2 1 Friday 39 | 3 22 Subday 40 | 9 9 Saturday 41 | 3 6 Monday 42 | 9 26 Wednesday 43 | 3 24 Friday 44 | 7 22 Subday 45 | 1 24 Wednesday 46 | 12 20 Saturday 47 | 11 1 Monday 48 | 5 26 Wednesday 49 | 8 13 Monday 50 | 8 10 Wednesday 51 | 4 23 Tuesday 52 | 6 23 Subday 53 | 9 10 Subday 54 | 5 21 Wednesday 55 | 10 10 Monday 56 | 8 16 Friday 57 | 5 27 Tuesday 58 | 3 18 Wednesday 59 | 7 24 Saturday 60 | 2 7 Friday 61 | 3 14 Saturday 62 | 1 6 Friday 63 | 10 16 Monday 64 | 5 7 Tuesday 65 | 6 18 Subday 66 | 2 3 Saturday 67 | 2 5 Wednesday 68 | 9 24 Monday 69 | 7 7 Friday 70 | 4 9 Thursday 71 | 11 7 Monday 72 | 8 17 Thursday 73 | 4 16 Wednesday 74 | 1 9 Friday 75 | 12 22 Saturday 76 | 4 1 Tuesday 77 | 2 16 Monday 78 | 11 21 Subday 79 | 1 8 Saturday 80 | 7 25 Subday 81 | 4 17 Wednesday 82 | 8 22 Tuesday 83 | 11 6 Wednesday 84 | 4 18 Subday 85 | 8 21 Tuesday 86 | 11 14 Saturday 87 | 12 5 Tuesday 88 | 2 18 Tuesday 89 | 1 11 Friday 90 | 2 17 Subday 91 | 6 8 Saturday 92 | 3 17 Monday 93 | 5 3 Tuesday 94 | 12 17 Wednesday 95 | 11 4 Saturday 96 | 4 27 Friday 97 | 4 26 Friday 98 | 2 12 Monday 99 | 9 2 Monday 100 | 2 11 Saturday 101 | 9 8 Saturday 102 | 100 103 | 8 13 0WH882QBHZWR1XP 104 | 3 17 ATVXY1UYXT2CW49 105 | 5 27 2D5VMS5XHK2XHS2 106 | 5 27 L60E6WMKGEUSV5R 107 | 5 26 WUT1OXOSVJE14I1 108 | 4 1 8AW1KDA5DCQU42P 109 | 11 7 D7ZWDPTPGVVIQJO 110 | 2 22 GE1XJ42N6SPEWVT 111 | 3 26 KCTTRIM3PJ9K1HU 112 | 9 9 PQCBGUH5OOUG634 113 | 3 18 ZODM68FP6STOLGT 114 | 8 22 5BA7OL6NB3BNV4A 115 | 2 17 TGDMG34N0IAHQ4Z 116 | 4 8 98JR9NKU6UQ3JZF 117 | 1 16 TNE990V2CLD1H3V 118 | 9 24 Q0LLYN2YJT1VX2P 119 | 4 27 7W5NVKOV0QBL5EW 120 | 9 18 RO70K96LTY7V5WG 121 | 5 3 WQ84VSY3MICBJOJ 122 | 6 8 X4OZRL93KGL10NW 123 | 2 18 PY6EO1RB8QGVF7W 124 | 9 24 VU556K3J9GV9U2Y 125 | 2 22 6PHUVUT21W2ZVHU 126 | 3 22 PAPENQC8G1SOI0M 127 | 2 11 R0GEZTLZZKEQZGL 128 | 1 24 3ADBFRSLPDQRAPS 129 | 3 22 AC433CHP402E0ZP 130 | 9 6 NPOV4F9WYWV9S92 131 | 12 17 R1GTVRST9M910FG 132 | 2 7 0TF7T39AOK11OWL 133 | 9 24 KQJ8T9DUPRQ1XGW 134 | 2 19 BXF782BF4TXECYB 135 | 1 16 30WMESNAP3T0MUM 136 | 4 1 BQBCTBZG9YN9SLI 137 | 12 5 IZ3P6XYSBJQHZR5 138 | 4 27 AJJICSJD4MLDCZJ 139 | 3 24 J4BD2PVSQFEMACH 140 | 8 22 VRX9MQF684C9TGG 141 | 11 4 6ECR0RWM5AIL51H 142 | 8 21 BJ2UP7O2E0WK474 143 | 1 24 IEENLBUAK5O2WZY 144 | 2 13 DJX77O39WWMUCQI 145 | 7 6 ONXZHHLD9CZA94A 146 | 9 8 KRG1UJB6QLAEYKX 147 | 7 22 B1VKLHHE1HOH373 148 | 3 17 BX78S2BNW686IZ1 149 | 9 18 T0UV93OZAO070YY 150 | 1 8 MSHBKESDT6SQK0S 151 | 3 26 HTIMLAOO7LXEFFT 152 | 12 5 AY26WQUOBDZNQHG 153 | 4 1 MN1EKPIO6IZ5U7Q 154 | 6 7 GEEHSDDPJ4Q6U8X 155 | 9 24 T6QZ955LTE4UHLR 156 | 4 10 EWFPCIL76E1VZ77 157 | 3 22 JTRGSOARSCTKWPW 158 | 3 17 II5IGRN221JYS4K 159 | 4 8 RC904BV2NSB8GY6 160 | 4 9 LPGIZQ70HF552TZ 161 | 3 1 LR7P6VWT5PE0704 162 | 1 6 OYVWGZTZ6LZFLMO 163 | 5 7 DFBZQWOK1KDTGCH 164 | 9 8 0D5OX7RVLAQLY6G 165 | 10 10 3BOL1T04NBR1MOC 166 | 8 16 CEH8NUNBI3S79EC 167 | 7 27 0GDN283M44NZI1S 168 | 2 1 ER2T9WYIJTJ3DZP 169 | 10 8 3GIYMEE3IJNGDVR 170 | 3 24 47KRRB01YDB6OB2 171 | 4 27 5VE80GYIL09G8YP 172 | 4 28 AJ2HP41Q8JOXCZ0 173 | 6 23 1VMA4HV4W1HLXP8 174 | 11 6 75Y7I7MI0BV294T 175 | 3 22 R5XUANN48CYWA7E 176 | 3 17 43W8VIDPQ7EAIFS 177 | 9 9 95Q40NN2R9EWM3Z 178 | 7 25 443ALCPTLX6JFGA 179 | 10 23 EAYE378387LFFST 180 | 1 11 443RTNP2J9O1J53 181 | 11 15 X4Z7YHUX5Z72YGZ 182 | 4 26 PK21DKSOBESS9WN 183 | 12 21 Q0FMKUTG0VD3VR4 184 | 7 7 WPSHDGB8QS0PKIL 185 | 11 7 TVB7S02FNP48VYH 186 | 6 7 P3OG5CD8T0DW1I6 187 | 6 23 HHH2JI85DM5OMXR 188 | 5 21 WN8GZETGE6UN6E8 189 | 9 24 PJHV4MOSA7N0QVI 190 | 10 16 U685WTFJLDGAI29 191 | 11 1 OWKXN2OCSSKUU2X 192 | 2 12 Q2JNNX4XU5ZLE2O 193 | 6 7 9F9M20OY43LS9XF 194 | 12 23 S21EG2Y9L3YL95N 195 | 5 27 0NZ7VAGJJ7KQ54K 196 | 1 8 P3QDOLUDIO9XKSB 197 | 4 6 VONLMLTGV01I5FS 198 | 11 6 NF8YK8390PNNFUP 199 | 12 19 3F95QB8F9B29IKE 200 | 9 24 7X1F3P2EOJG25E9 201 | 11 21 8EZ32JJRE11J6PF 202 | 11 1 J2TTCI3Z5HFP7XF 203 | -------------------------------------------------------------------------------- /data/24/1/data10.out: -------------------------------------------------------------------------------- 1 | 9/20 Monday Today is Free 2 | 4/6 Subday Today's Plan: 3 | VONLMLTGV01I5FS 4 | 11/17 Subday Today is Free 5 | 5/14 Friday Today is Free 6 | Friday is Free :) 7 | 9/6 Monday Today's Plan: 8 | NPOV4F9WYWV9S92 9 | 2/19 Tuesday Today's Plan: 10 | BXF782BF4TXECYB 11 | 2/13 Monday Today's Plan: 12 | DJX77O39WWMUCQI 13 | 4/10 Tuesday Today's Plan: 14 | EWFPCIL76E1VZ77 15 | 12/21 Tuesday Today's Plan: 16 | Q0FMKUTG0VD3VR4 17 | 7/27 Monday Today's Plan: 18 | 0GDN283M44NZI1S 19 | 6/28 Tuesday Today is Free 20 | 7/6 Saturday Today's Plan: 21 | ONXZHHLD9CZA94A 22 | 3/26 Saturday Today's Plan: 23 | KCTTRIM3PJ9K1HU 24 | HTIMLAOO7LXEFFT 25 | 6/7 Monday Today's Plan: 26 | GEEHSDDPJ4Q6U8X 27 | P3OG5CD8T0DW1I6 28 | 9F9M20OY43LS9XF 29 | 3/1 Friday Today's Plan: 30 | LR7P6VWT5PE0704 31 | Friday is Busy :( 32 | 12/23 Thursday Today's Plan: 33 | S21EG2Y9L3YL95N 34 | 10/21 Subday Today is Free 35 | 7/26 Wednesday Today is Free 36 | 11/15 Saturday Today's Plan: 37 | X4Z7YHUX5Z72YGZ 38 | 4/28 Monday Today's Plan: 39 | AJ2HP41Q8JOXCZ0 40 | 9/18 Monday Today's Plan: 41 | RO70K96LTY7V5WG 42 | T0UV93OZAO070YY 43 | 3/19 Thursday Today is Free 44 | 7/16 Tuesday Today is Free 45 | 10/23 Wednesday Today's Plan: 46 | EAYE378387LFFST 47 | 2/20 Wednesday Today is Free 48 | 4/8 Wednesday Today's Plan: 49 | 98JR9NKU6UQ3JZF 50 | RC904BV2NSB8GY6 51 | 3/9 Thursday Today is Free 52 | 1/16 Saturday Today's Plan: 53 | TNE990V2CLD1H3V 54 | 30WMESNAP3T0MUM 55 | 10/8 Subday Today's Plan: 56 | 3GIYMEE3IJNGDVR 57 | 2/22 Saturday Today's Plan: 58 | GE1XJ42N6SPEWVT 59 | 6PHUVUT21W2ZVHU 60 | 2/9 Tuesday Today is Free 61 | 12/19 Monday Today's Plan: 62 | 3F95QB8F9B29IKE 63 | 1/13 Friday Today is Free 64 | Friday is Free :) 65 | 8/23 Subday Today is Free 66 | 10/5 Monday Today is Free 67 | 7/2 Friday Today is Free 68 | Friday is Free :) 69 | 2/1 Friday Today's Plan: 70 | ER2T9WYIJTJ3DZP 71 | Friday is Busy :( 72 | 3/22 Subday Today's Plan: 73 | PAPENQC8G1SOI0M 74 | AC433CHP402E0ZP 75 | JTRGSOARSCTKWPW 76 | R5XUANN48CYWA7E 77 | 9/9 Saturday Today's Plan: 78 | PQCBGUH5OOUG634 79 | 95Q40NN2R9EWM3Z 80 | 3/6 Monday Today is Free 81 | 9/26 Wednesday Today is Free 82 | 3/24 Friday Today's Plan: 83 | J4BD2PVSQFEMACH 84 | 47KRRB01YDB6OB2 85 | Friday is Busy :( 86 | 7/22 Subday Today's Plan: 87 | B1VKLHHE1HOH373 88 | 1/24 Wednesday Today's Plan: 89 | 3ADBFRSLPDQRAPS 90 | IEENLBUAK5O2WZY 91 | 12/20 Saturday Today is Free 92 | 11/1 Monday Today's Plan: 93 | OWKXN2OCSSKUU2X 94 | J2TTCI3Z5HFP7XF 95 | 5/26 Wednesday Today's Plan: 96 | WUT1OXOSVJE14I1 97 | 8/13 Monday Today's Plan: 98 | 0WH882QBHZWR1XP 99 | 8/10 Wednesday Today is Free 100 | 4/23 Tuesday Today is Free 101 | 6/23 Subday Today's Plan: 102 | 1VMA4HV4W1HLXP8 103 | HHH2JI85DM5OMXR 104 | 9/10 Subday Today is Free 105 | 5/21 Wednesday Today's Plan: 106 | WN8GZETGE6UN6E8 107 | 10/10 Monday Today's Plan: 108 | 3BOL1T04NBR1MOC 109 | 8/16 Friday Today's Plan: 110 | CEH8NUNBI3S79EC 111 | Friday is Busy :( 112 | 5/27 Tuesday Today's Plan: 113 | 2D5VMS5XHK2XHS2 114 | L60E6WMKGEUSV5R 115 | 0NZ7VAGJJ7KQ54K 116 | 3/18 Wednesday Today's Plan: 117 | ZODM68FP6STOLGT 118 | 7/24 Saturday Today is Free 119 | 2/7 Friday Today's Plan: 120 | 0TF7T39AOK11OWL 121 | Friday is Busy :( 122 | 3/14 Saturday Today is Free 123 | 1/6 Friday Today's Plan: 124 | OYVWGZTZ6LZFLMO 125 | Friday is Busy :( 126 | 10/16 Monday Today's Plan: 127 | U685WTFJLDGAI29 128 | 5/7 Tuesday Today's Plan: 129 | DFBZQWOK1KDTGCH 130 | 6/18 Subday Today is Free 131 | 2/3 Saturday Today is Free 132 | 2/5 Wednesday Today is Free 133 | 9/24 Monday Today's Plan: 134 | Q0LLYN2YJT1VX2P 135 | VU556K3J9GV9U2Y 136 | KQJ8T9DUPRQ1XGW 137 | T6QZ955LTE4UHLR 138 | PJHV4MOSA7N0QVI 139 | 7X1F3P2EOJG25E9 140 | 7/7 Friday Today's Plan: 141 | WPSHDGB8QS0PKIL 142 | Friday is Busy :( 143 | 4/9 Thursday Today's Plan: 144 | LPGIZQ70HF552TZ 145 | 11/7 Monday Today's Plan: 146 | D7ZWDPTPGVVIQJO 147 | TVB7S02FNP48VYH 148 | 8/17 Thursday Today is Free 149 | 4/16 Wednesday Today is Free 150 | 1/9 Friday Today is Free 151 | Friday is Free :) 152 | 12/22 Saturday Today is Free 153 | 4/1 Tuesday Today's Plan: 154 | 8AW1KDA5DCQU42P 155 | BQBCTBZG9YN9SLI 156 | MN1EKPIO6IZ5U7Q 157 | 2/16 Monday Today is Free 158 | 11/21 Subday Today's Plan: 159 | 8EZ32JJRE11J6PF 160 | 1/8 Saturday Today's Plan: 161 | MSHBKESDT6SQK0S 162 | P3QDOLUDIO9XKSB 163 | 7/25 Subday Today's Plan: 164 | 443ALCPTLX6JFGA 165 | 4/17 Wednesday Today is Free 166 | 8/22 Tuesday Today's Plan: 167 | 5BA7OL6NB3BNV4A 168 | VRX9MQF684C9TGG 169 | 11/6 Wednesday Today's Plan: 170 | 75Y7I7MI0BV294T 171 | NF8YK8390PNNFUP 172 | 4/18 Subday Today is Free 173 | 8/21 Tuesday Today's Plan: 174 | BJ2UP7O2E0WK474 175 | 11/14 Saturday Today is Free 176 | 12/5 Tuesday Today's Plan: 177 | IZ3P6XYSBJQHZR5 178 | AY26WQUOBDZNQHG 179 | 2/18 Tuesday Today's Plan: 180 | PY6EO1RB8QGVF7W 181 | 1/11 Friday Today's Plan: 182 | 443RTNP2J9O1J53 183 | Friday is Busy :( 184 | 2/17 Subday Today's Plan: 185 | TGDMG34N0IAHQ4Z 186 | 6/8 Saturday Today's Plan: 187 | X4OZRL93KGL10NW 188 | 3/17 Monday Today's Plan: 189 | ATVXY1UYXT2CW49 190 | BX78S2BNW686IZ1 191 | II5IGRN221JYS4K 192 | 43W8VIDPQ7EAIFS 193 | 5/3 Tuesday Today's Plan: 194 | WQ84VSY3MICBJOJ 195 | 12/17 Wednesday Today's Plan: 196 | R1GTVRST9M910FG 197 | 11/4 Saturday Today's Plan: 198 | 6ECR0RWM5AIL51H 199 | 4/27 Friday Today's Plan: 200 | 7W5NVKOV0QBL5EW 201 | AJJICSJD4MLDCZJ 202 | 5VE80GYIL09G8YP 203 | Friday is Busy :( 204 | 4/26 Friday Today's Plan: 205 | PK21DKSOBESS9WN 206 | Friday is Busy :( 207 | 2/12 Monday Today's Plan: 208 | Q2JNNX4XU5ZLE2O 209 | 9/2 Monday Today is Free 210 | 2/11 Saturday Today's Plan: 211 | R0GEZTLZZKEQZGL 212 | 9/8 Saturday Today's Plan: 213 | KRG1UJB6QLAEYKX 214 | 0D5OX7RVLAQLY6G 215 | -------------------------------------------------------------------------------- /data/24/1/data2.in: -------------------------------------------------------------------------------- 1 | 100 2 | 4 1 Monday 3 | 9 17 Tuesday 4 | 3 23 Saturday 5 | 2 23 Friday 6 | 4 7 Subday 7 | 7 7 Saturday 8 | 12 12 Tuesday 9 | 11 20 Thursday 10 | 5 25 Thursday 11 | 9 23 Monday 12 | 11 10 Wednesday 13 | 8 19 Subday 14 | 10 3 Friday 15 | 12 2 Tuesday 16 | 4 5 Wednesday 17 | 6 28 Saturday 18 | 1 12 Tuesday 19 | 9 3 Saturday 20 | 3 17 Subday 21 | 9 28 Thursday 22 | 4 3 Tuesday 23 | 10 25 Thursday 24 | 1 7 Monday 25 | 9 19 Friday 26 | 6 22 Wednesday 27 | 6 20 Friday 28 | 12 3 Friday 29 | 2 27 Saturday 30 | 7 23 Monday 31 | 8 27 Saturday 32 | 4 17 Thursday 33 | 4 24 Friday 34 | 7 4 Saturday 35 | 11 6 Friday 36 | 10 16 Saturday 37 | 6 25 Tuesday 38 | 1 25 Subday 39 | 9 25 Wednesday 40 | 11 24 Friday 41 | 12 4 Subday 42 | 9 16 Wednesday 43 | 2 13 Monday 44 | 7 17 Subday 45 | 3 14 Saturday 46 | 4 12 Monday 47 | 1 24 Friday 48 | 8 8 Saturday 49 | 2 16 Saturday 50 | 4 28 Friday 51 | 6 16 Subday 52 | 3 7 Monday 53 | 2 12 Thursday 54 | 12 28 Saturday 55 | 11 1 Wednesday 56 | 5 4 Saturday 57 | 2 6 Subday 58 | 5 5 Friday 59 | 10 13 Monday 60 | 9 6 Thursday 61 | 2 8 Wednesday 62 | 6 18 Saturday 63 | 12 25 Saturday 64 | 8 4 Wednesday 65 | 4 9 Thursday 66 | 1 27 Subday 67 | 11 7 Thursday 68 | 3 10 Wednesday 69 | 11 11 Tuesday 70 | 3 19 Saturday 71 | 6 6 Thursday 72 | 8 2 Friday 73 | 8 26 Friday 74 | 6 24 Saturday 75 | 11 22 Saturday 76 | 4 14 Tuesday 77 | 4 13 Thursday 78 | 12 7 Saturday 79 | 8 16 Thursday 80 | 2 7 Tuesday 81 | 7 6 Subday 82 | 11 15 Thursday 83 | 8 21 Monday 84 | 1 1 Friday 85 | 10 8 Thursday 86 | 6 27 Monday 87 | 5 15 Saturday 88 | 7 22 Friday 89 | 5 22 Tuesday 90 | 6 17 Tuesday 91 | 3 15 Tuesday 92 | 3 13 Saturday 93 | 12 21 Monday 94 | 5 27 Monday 95 | 9 10 Subday 96 | 9 14 Saturday 97 | 2 15 Subday 98 | 5 23 Thursday 99 | 4 20 Friday 100 | 5 24 Subday 101 | 1 6 Thursday 102 | 100 103 | 1 6 LZCW0GO03BWMXRB 104 | 7 7 7X880NNTPKSOPWX 105 | 9 14 9ADJR8V2UILFO1Q 106 | 5 27 8DC09KTU8FKV94R 107 | 9 3 Z89UZPJTF32ZYT7 108 | 11 24 VMT2B9EPD5VT8NP 109 | 7 22 MVB6KN7PGV715K6 110 | 6 16 2DDEQXM36K8MIJV 111 | 2 7 SGVEDIH7C4HCL85 112 | 3 15 UMKHM4BP1EP1HZQ 113 | 1 1 NDV3M8L21GXKJ42 114 | 6 24 MG858NNXAJ154AU 115 | 4 24 1WSB0IOE68GV8ZL 116 | 4 1 RN1ALFXWWVTK2CZ 117 | 7 23 EEE0FDN2CLXZ86I 118 | 3 10 Q8BO6L5IMBLBCI8 119 | 12 7 N1DNA5DCFYR3RLB 120 | 2 23 7CTZM99YKURA9RX 121 | 12 4 1XR1PXO9WZ04GH1 122 | 12 7 FRV5UHU054XYL6K 123 | 6 17 P7L42FG5Z7N9EVP 124 | 1 1 ETNZNSWAV15BV3A 125 | 1 25 HVPWGWKBEOMHV9U 126 | 11 10 E23O7MVP2YO2ORH 127 | 6 28 STCWZTE27PA4GSI 128 | 3 10 2JRO95R1WDMRYRT 129 | 12 2 8P8Y458AVEAUVNJ 130 | 8 19 D335SVCJY4OSGAW 131 | 6 6 GDJUJZBPUILDQDS 132 | 8 21 03KBD3D2SXZ5NIR 133 | 12 3 9KVX04AFSG8A39G 134 | 6 28 TYU8TMI5ZC8QP73 135 | 6 20 CFK7303E6RUMLBX 136 | 12 4 EAG7EQHEX957PJ1 137 | 9 28 47QZQDRQRGRY2DD 138 | 12 28 PBLT3U7W1VFPJ0T 139 | 5 25 60V23FG01FCMDG3 140 | 12 21 J7FY0MV2QDB68LP 141 | 4 9 JUFHBTLNU4WHSCI 142 | 12 3 FY9DO2I2YTELUP8 143 | 1 7 T5AVOI3WYKRKOID 144 | 12 4 5HGLCX6SSG9OCSL 145 | 11 7 AB4E0DMHICSMYLB 146 | 10 3 KYNIC0XAN27UF9E 147 | 11 6 0QBD24VAHOFVD3L 148 | 11 6 1AVB6Z5BHWRUIXM 149 | 6 24 VYD8CU61U1RDSIP 150 | 3 17 N2CPOX60VCKYBTK 151 | 6 20 ZV537PJCH6Q25BB 152 | 8 26 WLHMCKS73J9539C 153 | 5 4 GSWRFEZNO23SW28 154 | 10 8 Z7B5OBYUJDZJ272 155 | 12 28 04JLA24HNG4IFML 156 | 2 6 HTPAZETOFUF3M19 157 | 3 15 244BPX0Q6FO7GG1 158 | 3 7 F4W6M7OHCWZ5WY8 159 | 12 4 GGJBV7QN6PS2O5J 160 | 1 12 MUJGMYX5DJLMQ9E 161 | 1 24 63R785ABZHUS3PC 162 | 4 7 NGM0W6UJGJHDF6O 163 | 11 22 ZZRR53E7K53NENT 164 | 3 13 NEFQN322UXL8EQ7 165 | 1 6 4TPEDVW7V0FO09Z 166 | 6 25 9OACCDOODDY3SQ2 167 | 12 7 3MED3WS87CDHZI9 168 | 1 24 39J39BHDFFT17HB 169 | 6 28 ZVFDPME65VH0U0M 170 | 12 7 QYOZJNVKZAH10PK 171 | 12 3 7RM0MDCOQQDMYOC 172 | 5 24 272L0042K3XVUDG 173 | 5 23 M3UAH5GVKHQB0ID 174 | 1 7 M0OKX3ZLPS6NO7A 175 | 3 15 81SZV0BBG9BPNFK 176 | 4 9 O92PNCG1W0323DT 177 | 5 15 89V3GMNA7XNDD5E 178 | 4 3 SAA0SUGT9V52QM4 179 | 1 12 S0FUYXQD3ZCRMH1 180 | 12 4 A19QSS3RUFD0377 181 | 9 25 IORPZO783L9G46E 182 | 11 1 5DPLWW1LK0GOW6K 183 | 1 1 LCF0S0XD6EPOVC1 184 | 1 1 WJU8PLT7VG71U88 185 | 12 12 GQFSFAPBSGE2TPO 186 | 1 6 21VVGEYP4N5OUQN 187 | 12 21 JWDB5BHIA0IM4Q8 188 | 10 25 X8P7O6EQ1ZBQJCX 189 | 8 4 J9ZIUTWQGT44G18 190 | 9 25 RNNB8UKEMPIJN48 191 | 8 2 1YMW1B2VP4D1WXL 192 | 2 16 VSIKK60P4BQ97CQ 193 | 7 6 9P1PYIVYFWXVI4U 194 | 9 14 103IXMB3HHSCU35 195 | 11 15 WUB74IVV16ERFXZ 196 | 5 23 Z780SB8CUIINC7W 197 | 8 26 C8B6P6X5Z6050ID 198 | 12 3 M2DLHBA56AUK8DS 199 | 1 24 L6GD1UZSUHB5QB8 200 | 10 16 9RTKBTTDZX3JV9B 201 | 4 7 8SJWTCL682Z2KF6 202 | 5 5 83UEV1RCGIV5HWA 203 | -------------------------------------------------------------------------------- /data/24/1/data2.out: -------------------------------------------------------------------------------- 1 | 4/1 Monday Today's Plan: 2 | RN1ALFXWWVTK2CZ 3 | 9/17 Tuesday Today is Free 4 | 3/23 Saturday Today is Free 5 | 2/23 Friday Today's Plan: 6 | 7CTZM99YKURA9RX 7 | Friday is Busy :( 8 | 4/7 Subday Today's Plan: 9 | NGM0W6UJGJHDF6O 10 | 8SJWTCL682Z2KF6 11 | 7/7 Saturday Today's Plan: 12 | 7X880NNTPKSOPWX 13 | 12/12 Tuesday Today's Plan: 14 | GQFSFAPBSGE2TPO 15 | 11/20 Thursday Today is Free 16 | 5/25 Thursday Today's Plan: 17 | 60V23FG01FCMDG3 18 | 9/23 Monday Today is Free 19 | 11/10 Wednesday Today's Plan: 20 | E23O7MVP2YO2ORH 21 | 8/19 Subday Today's Plan: 22 | D335SVCJY4OSGAW 23 | 10/3 Friday Today's Plan: 24 | KYNIC0XAN27UF9E 25 | Friday is Busy :( 26 | 12/2 Tuesday Today's Plan: 27 | 8P8Y458AVEAUVNJ 28 | 4/5 Wednesday Today is Free 29 | 6/28 Saturday Today's Plan: 30 | STCWZTE27PA4GSI 31 | TYU8TMI5ZC8QP73 32 | ZVFDPME65VH0U0M 33 | 1/12 Tuesday Today's Plan: 34 | MUJGMYX5DJLMQ9E 35 | S0FUYXQD3ZCRMH1 36 | 9/3 Saturday Today's Plan: 37 | Z89UZPJTF32ZYT7 38 | 3/17 Subday Today's Plan: 39 | N2CPOX60VCKYBTK 40 | 9/28 Thursday Today's Plan: 41 | 47QZQDRQRGRY2DD 42 | 4/3 Tuesday Today's Plan: 43 | SAA0SUGT9V52QM4 44 | 10/25 Thursday Today's Plan: 45 | X8P7O6EQ1ZBQJCX 46 | 1/7 Monday Today's Plan: 47 | T5AVOI3WYKRKOID 48 | M0OKX3ZLPS6NO7A 49 | 9/19 Friday Today is Free 50 | Friday is Free :) 51 | 6/22 Wednesday Today is Free 52 | 6/20 Friday Today's Plan: 53 | CFK7303E6RUMLBX 54 | ZV537PJCH6Q25BB 55 | Friday is Busy :( 56 | 12/3 Friday Today's Plan: 57 | 9KVX04AFSG8A39G 58 | FY9DO2I2YTELUP8 59 | 7RM0MDCOQQDMYOC 60 | M2DLHBA56AUK8DS 61 | Friday is Busy :( 62 | 2/27 Saturday Today is Free 63 | 7/23 Monday Today's Plan: 64 | EEE0FDN2CLXZ86I 65 | 8/27 Saturday Today is Free 66 | 4/17 Thursday Today is Free 67 | 4/24 Friday Today's Plan: 68 | 1WSB0IOE68GV8ZL 69 | Friday is Busy :( 70 | 7/4 Saturday Today is Free 71 | 11/6 Friday Today's Plan: 72 | 0QBD24VAHOFVD3L 73 | 1AVB6Z5BHWRUIXM 74 | Friday is Busy :( 75 | 10/16 Saturday Today's Plan: 76 | 9RTKBTTDZX3JV9B 77 | 6/25 Tuesday Today's Plan: 78 | 9OACCDOODDY3SQ2 79 | 1/25 Subday Today's Plan: 80 | HVPWGWKBEOMHV9U 81 | 9/25 Wednesday Today's Plan: 82 | IORPZO783L9G46E 83 | RNNB8UKEMPIJN48 84 | 11/24 Friday Today's Plan: 85 | VMT2B9EPD5VT8NP 86 | Friday is Busy :( 87 | 12/4 Subday Today's Plan: 88 | 1XR1PXO9WZ04GH1 89 | EAG7EQHEX957PJ1 90 | 5HGLCX6SSG9OCSL 91 | GGJBV7QN6PS2O5J 92 | A19QSS3RUFD0377 93 | 9/16 Wednesday Today is Free 94 | 2/13 Monday Today is Free 95 | 7/17 Subday Today is Free 96 | 3/14 Saturday Today is Free 97 | 4/12 Monday Today is Free 98 | 1/24 Friday Today's Plan: 99 | 63R785ABZHUS3PC 100 | 39J39BHDFFT17HB 101 | L6GD1UZSUHB5QB8 102 | Friday is Busy :( 103 | 8/8 Saturday Today is Free 104 | 2/16 Saturday Today's Plan: 105 | VSIKK60P4BQ97CQ 106 | 4/28 Friday Today is Free 107 | Friday is Free :) 108 | 6/16 Subday Today's Plan: 109 | 2DDEQXM36K8MIJV 110 | 3/7 Monday Today's Plan: 111 | F4W6M7OHCWZ5WY8 112 | 2/12 Thursday Today is Free 113 | 12/28 Saturday Today's Plan: 114 | PBLT3U7W1VFPJ0T 115 | 04JLA24HNG4IFML 116 | 11/1 Wednesday Today's Plan: 117 | 5DPLWW1LK0GOW6K 118 | 5/4 Saturday Today's Plan: 119 | GSWRFEZNO23SW28 120 | 2/6 Subday Today's Plan: 121 | HTPAZETOFUF3M19 122 | 5/5 Friday Today's Plan: 123 | 83UEV1RCGIV5HWA 124 | Friday is Busy :( 125 | 10/13 Monday Today is Free 126 | 9/6 Thursday Today is Free 127 | 2/8 Wednesday Today is Free 128 | 6/18 Saturday Today is Free 129 | 12/25 Saturday Today is Free 130 | 8/4 Wednesday Today's Plan: 131 | J9ZIUTWQGT44G18 132 | 4/9 Thursday Today's Plan: 133 | JUFHBTLNU4WHSCI 134 | O92PNCG1W0323DT 135 | 1/27 Subday Today is Free 136 | 11/7 Thursday Today's Plan: 137 | AB4E0DMHICSMYLB 138 | 3/10 Wednesday Today's Plan: 139 | Q8BO6L5IMBLBCI8 140 | 2JRO95R1WDMRYRT 141 | 11/11 Tuesday Today is Free 142 | 3/19 Saturday Today is Free 143 | 6/6 Thursday Today's Plan: 144 | GDJUJZBPUILDQDS 145 | 8/2 Friday Today's Plan: 146 | 1YMW1B2VP4D1WXL 147 | Friday is Busy :( 148 | 8/26 Friday Today's Plan: 149 | WLHMCKS73J9539C 150 | C8B6P6X5Z6050ID 151 | Friday is Busy :( 152 | 6/24 Saturday Today's Plan: 153 | MG858NNXAJ154AU 154 | VYD8CU61U1RDSIP 155 | 11/22 Saturday Today's Plan: 156 | ZZRR53E7K53NENT 157 | 4/14 Tuesday Today is Free 158 | 4/13 Thursday Today is Free 159 | 12/7 Saturday Today's Plan: 160 | N1DNA5DCFYR3RLB 161 | FRV5UHU054XYL6K 162 | 3MED3WS87CDHZI9 163 | QYOZJNVKZAH10PK 164 | 8/16 Thursday Today is Free 165 | 2/7 Tuesday Today's Plan: 166 | SGVEDIH7C4HCL85 167 | 7/6 Subday Today's Plan: 168 | 9P1PYIVYFWXVI4U 169 | 11/15 Thursday Today's Plan: 170 | WUB74IVV16ERFXZ 171 | 8/21 Monday Today's Plan: 172 | 03KBD3D2SXZ5NIR 173 | 1/1 Friday Today's Plan: 174 | NDV3M8L21GXKJ42 175 | ETNZNSWAV15BV3A 176 | LCF0S0XD6EPOVC1 177 | WJU8PLT7VG71U88 178 | Friday is Busy :( 179 | 10/8 Thursday Today's Plan: 180 | Z7B5OBYUJDZJ272 181 | 6/27 Monday Today is Free 182 | 5/15 Saturday Today's Plan: 183 | 89V3GMNA7XNDD5E 184 | 7/22 Friday Today's Plan: 185 | MVB6KN7PGV715K6 186 | Friday is Busy :( 187 | 5/22 Tuesday Today is Free 188 | 6/17 Tuesday Today's Plan: 189 | P7L42FG5Z7N9EVP 190 | 3/15 Tuesday Today's Plan: 191 | UMKHM4BP1EP1HZQ 192 | 244BPX0Q6FO7GG1 193 | 81SZV0BBG9BPNFK 194 | 3/13 Saturday Today's Plan: 195 | NEFQN322UXL8EQ7 196 | 12/21 Monday Today's Plan: 197 | J7FY0MV2QDB68LP 198 | JWDB5BHIA0IM4Q8 199 | 5/27 Monday Today's Plan: 200 | 8DC09KTU8FKV94R 201 | 9/10 Subday Today is Free 202 | 9/14 Saturday Today's Plan: 203 | 9ADJR8V2UILFO1Q 204 | 103IXMB3HHSCU35 205 | 2/15 Subday Today is Free 206 | 5/23 Thursday Today's Plan: 207 | M3UAH5GVKHQB0ID 208 | Z780SB8CUIINC7W 209 | 4/20 Friday Today is Free 210 | Friday is Free :) 211 | 5/24 Subday Today's Plan: 212 | 272L0042K3XVUDG 213 | 1/6 Thursday Today's Plan: 214 | LZCW0GO03BWMXRB 215 | 4TPEDVW7V0FO09Z 216 | 21VVGEYP4N5OUQN 217 | -------------------------------------------------------------------------------- /data/24/1/data3.in: -------------------------------------------------------------------------------- 1 | 100 2 | 3 20 Subday 3 | 4 21 Subday 4 | 3 22 Thursday 5 | 8 26 Monday 6 | 6 27 Subday 7 | 8 25 Tuesday 8 | 12 10 Wednesday 9 | 9 21 Saturday 10 | 11 14 Saturday 11 | 12 1 Subday 12 | 3 17 Friday 13 | 9 13 Thursday 14 | 9 23 Subday 15 | 6 6 Monday 16 | 3 1 Subday 17 | 8 20 Tuesday 18 | 7 11 Saturday 19 | 8 24 Wednesday 20 | 8 7 Wednesday 21 | 2 25 Wednesday 22 | 2 12 Saturday 23 | 6 1 Saturday 24 | 12 3 Thursday 25 | 12 20 Friday 26 | 7 21 Subday 27 | 12 28 Subday 28 | 11 8 Friday 29 | 9 19 Saturday 30 | 9 12 Monday 31 | 10 23 Thursday 32 | 1 28 Tuesday 33 | 5 16 Saturday 34 | 9 20 Tuesday 35 | 4 26 Monday 36 | 5 28 Subday 37 | 4 27 Friday 38 | 11 5 Subday 39 | 9 18 Saturday 40 | 9 1 Tuesday 41 | 3 9 Monday 42 | 6 9 Wednesday 43 | 7 12 Thursday 44 | 8 8 Friday 45 | 5 8 Saturday 46 | 7 3 Tuesday 47 | 12 27 Monday 48 | 11 9 Wednesday 49 | 4 9 Friday 50 | 12 16 Thursday 51 | 5 15 Saturday 52 | 10 5 Wednesday 53 | 6 15 Wednesday 54 | 1 12 Thursday 55 | 4 22 Subday 56 | 1 17 Saturday 57 | 4 28 Subday 58 | 4 25 Monday 59 | 10 11 Thursday 60 | 5 1 Saturday 61 | 11 12 Saturday 62 | 3 13 Thursday 63 | 3 5 Monday 64 | 1 9 Monday 65 | 6 25 Friday 66 | 1 4 Thursday 67 | 1 19 Tuesday 68 | 2 28 Wednesday 69 | 3 7 Thursday 70 | 6 23 Monday 71 | 10 10 Subday 72 | 4 5 Thursday 73 | 7 23 Subday 74 | 9 11 Thursday 75 | 6 18 Tuesday 76 | 1 8 Thursday 77 | 5 11 Thursday 78 | 12 26 Wednesday 79 | 10 13 Thursday 80 | 3 16 Monday 81 | 2 2 Thursday 82 | 7 1 Tuesday 83 | 9 22 Saturday 84 | 11 17 Saturday 85 | 6 11 Friday 86 | 11 10 Thursday 87 | 10 4 Saturday 88 | 3 19 Thursday 89 | 5 22 Saturday 90 | 9 15 Wednesday 91 | 2 22 Tuesday 92 | 9 3 Saturday 93 | 5 6 Thursday 94 | 9 5 Monday 95 | 12 2 Tuesday 96 | 12 9 Subday 97 | 7 25 Monday 98 | 6 21 Wednesday 99 | 5 18 Tuesday 100 | 2 8 Thursday 101 | 10 6 Monday 102 | 100 103 | 7 23 ZQTW5D41SWGK1QC 104 | 10 4 WA6MXMRBAE5U2Q0 105 | 1 17 2ZPJ0N535ZYOBZK 106 | 10 10 MIZXE0PUS66HI2D 107 | 6 25 DQ9SSAEU20T35NQ 108 | 3 17 SFX6DS8DDZH0SJQ 109 | 11 10 GAB6F3710KLEV7X 110 | 1 8 F448YGZ8FHRCMQY 111 | 6 11 XKO4HP9Q1N2UP0Q 112 | 12 3 CZVWS50EWA00HSS 113 | 1 12 OSV4JXTU29A7NUN 114 | 4 22 6G5XV62VMEHMHBQ 115 | 7 25 T9F0ZMU7WWAK6VC 116 | 9 20 IS1SHYJ4JLWGRH1 117 | 1 17 VML7BB22M1ATYC1 118 | 4 27 1Q462BTVJR6J3T1 119 | 9 18 JHEZDMIS7SMRDNM 120 | 5 11 GM9CQCA6BH0SWKY 121 | 4 5 2S02EYSE9AWYEBP 122 | 1 19 3V175D24G22XTF3 123 | 8 26 43XOJV13WV29VNK 124 | 4 22 YY2VPWF6BEI57TG 125 | 9 23 XS63AEEZE1Y61N1 126 | 5 15 S5A06I1AMH75QK3 127 | 9 13 B6UAM1G7PCKQ39K 128 | 6 25 3LB44A4SAUUMV9L 129 | 2 28 0JAFAFWBPHAOJLS 130 | 10 4 ITJMGPYN52T3IQW 131 | 5 22 JHJX59UON3QL7RY 132 | 12 1 UP9I9M2JVH4A606 133 | 7 21 QPLN2UYMRPG83XU 134 | 10 4 CTNPB9C3OD58S4M 135 | 9 19 XSNHN9SXK1SNUH5 136 | 4 26 SA5EN2JZ4M36MGA 137 | 7 12 PIOM6MUC77OUVKC 138 | 4 9 MBQB75CSTP7EF2G 139 | 4 27 6UJUKKPVI9QU8N0 140 | 5 28 K2IXC10USFQMPE7 141 | 7 21 8CFA7SQ5VH6Y2K9 142 | 5 15 VHE9IE6IG2R2WHU 143 | 9 22 X4XQPARQTAAR5SN 144 | 10 6 C081KFH1UNEOMSO 145 | 4 21 6GJTLTOJGXKVSXK 146 | 11 8 MOXZ2Z7HV6V6JHW 147 | 1 8 AHQJP3XAD2DNR9C 148 | 1 19 ABBFPJ0U91S1BON 149 | 6 21 XPALKKUE8CZ7BB9 150 | 1 8 RPHFP0HB0HRMV6N 151 | 3 13 OAC6FWMI19VJOIV 152 | 6 23 3TIQR0LSQB2VNG1 153 | 9 21 DH0QG8ML7O1UUHQ 154 | 7 1 3CFI9MG3CKVPXN3 155 | 3 1 6OF2DK6BQI6LEP5 156 | 4 5 97MVLRAKHMUGYYO 157 | 10 11 YPWU2YRSLHO4F31 158 | 10 11 WE0E7WRQTUDER92 159 | 3 17 8WITKEO0ITO4ILX 160 | 8 25 IA92BMRQ6Y252XX 161 | 9 20 NJBTWA0304WKWAU 162 | 2 28 35AEY9N13MO1II9 163 | 8 7 A5R7COIUW8MYS1P 164 | 8 25 3PANV52WVBJRHW5 165 | 12 10 YAG8WHPRM2ZXJY4 166 | 6 11 7FZHIZ1Q3N2EHHX 167 | 7 23 Q07KWEUE25KYC8V 168 | 4 21 MURNUS2NQD9G17A 169 | 3 13 HXZB433K6PL3S2S 170 | 7 3 60SSBDNICS4FF42 171 | 11 17 78BQ7ZQCLHU47N8 172 | 5 16 IIC2XWAM6EPO3MX 173 | 8 26 4TWDFHICGWY9IHW 174 | 8 20 00Y3YCZXUW7LX8U 175 | 4 9 XA64JT85YEN1GPD 176 | 11 12 N7X0150J8G89MQ3 177 | 11 5 IUNFGO9T40XT1E3 178 | 9 13 YOXHFR0NSXHSZLE 179 | 12 10 7RWG0S59U02WPQN 180 | 12 28 C5GDL2UFN80D11W 181 | 8 24 XAX5GACO8VETKR5 182 | 6 25 W6MXMX9CZ0NW2JV 183 | 3 1 GU1B9TIPXJ1JBZI 184 | 5 11 QY21SIUW5M87KW5 185 | 8 26 PET5WMK7V4CWF9M 186 | 9 5 5E0YHVMT68Z4PSB 187 | 1 12 T3TKSJ53JNL7ZEL 188 | 10 13 NWI6HL5ZXQ0X84D 189 | 10 11 CCM51RDQKM14QFP 190 | 1 8 6G4FCC7SQG7PBMV 191 | 9 19 Q3EST7P1SND61KY 192 | 9 18 RB1TLORBOJ8NCOP 193 | 11 14 R9VK01225SNLFFQ 194 | 1 12 KC7QGZAWDSJTAHT 195 | 8 24 H4RYECT3OD5Y3JU 196 | 3 5 DS42KS1OXC8IZA9 197 | 7 12 UZVSM8I5KOR1CUR 198 | 5 8 DEGG64CQJP78M51 199 | 7 3 H5Y5APLN655O6S5 200 | 6 23 RO46YBVDBX1KXFS 201 | 5 8 JCTR441NI8JU1UN 202 | 6 9 QYTU2EHH9JMB86G 203 | -------------------------------------------------------------------------------- /data/24/1/data3.out: -------------------------------------------------------------------------------- 1 | 3/20 Subday Today is Free 2 | 4/21 Subday Today's Plan: 3 | 6GJTLTOJGXKVSXK 4 | MURNUS2NQD9G17A 5 | 3/22 Thursday Today is Free 6 | 8/26 Monday Today's Plan: 7 | 43XOJV13WV29VNK 8 | 4TWDFHICGWY9IHW 9 | PET5WMK7V4CWF9M 10 | 6/27 Subday Today is Free 11 | 8/25 Tuesday Today's Plan: 12 | IA92BMRQ6Y252XX 13 | 3PANV52WVBJRHW5 14 | 12/10 Wednesday Today's Plan: 15 | YAG8WHPRM2ZXJY4 16 | 7RWG0S59U02WPQN 17 | 9/21 Saturday Today's Plan: 18 | DH0QG8ML7O1UUHQ 19 | 11/14 Saturday Today's Plan: 20 | R9VK01225SNLFFQ 21 | 12/1 Subday Today's Plan: 22 | UP9I9M2JVH4A606 23 | 3/17 Friday Today's Plan: 24 | SFX6DS8DDZH0SJQ 25 | 8WITKEO0ITO4ILX 26 | Friday is Busy :( 27 | 9/13 Thursday Today's Plan: 28 | B6UAM1G7PCKQ39K 29 | YOXHFR0NSXHSZLE 30 | 9/23 Subday Today's Plan: 31 | XS63AEEZE1Y61N1 32 | 6/6 Monday Today is Free 33 | 3/1 Subday Today's Plan: 34 | 6OF2DK6BQI6LEP5 35 | GU1B9TIPXJ1JBZI 36 | 8/20 Tuesday Today's Plan: 37 | 00Y3YCZXUW7LX8U 38 | 7/11 Saturday Today is Free 39 | 8/24 Wednesday Today's Plan: 40 | XAX5GACO8VETKR5 41 | H4RYECT3OD5Y3JU 42 | 8/7 Wednesday Today's Plan: 43 | A5R7COIUW8MYS1P 44 | 2/25 Wednesday Today is Free 45 | 2/12 Saturday Today is Free 46 | 6/1 Saturday Today is Free 47 | 12/3 Thursday Today's Plan: 48 | CZVWS50EWA00HSS 49 | 12/20 Friday Today is Free 50 | Friday is Free :) 51 | 7/21 Subday Today's Plan: 52 | QPLN2UYMRPG83XU 53 | 8CFA7SQ5VH6Y2K9 54 | 12/28 Subday Today's Plan: 55 | C5GDL2UFN80D11W 56 | 11/8 Friday Today's Plan: 57 | MOXZ2Z7HV6V6JHW 58 | Friday is Busy :( 59 | 9/19 Saturday Today's Plan: 60 | XSNHN9SXK1SNUH5 61 | Q3EST7P1SND61KY 62 | 9/12 Monday Today is Free 63 | 10/23 Thursday Today is Free 64 | 1/28 Tuesday Today is Free 65 | 5/16 Saturday Today's Plan: 66 | IIC2XWAM6EPO3MX 67 | 9/20 Tuesday Today's Plan: 68 | IS1SHYJ4JLWGRH1 69 | NJBTWA0304WKWAU 70 | 4/26 Monday Today's Plan: 71 | SA5EN2JZ4M36MGA 72 | 5/28 Subday Today's Plan: 73 | K2IXC10USFQMPE7 74 | 4/27 Friday Today's Plan: 75 | 1Q462BTVJR6J3T1 76 | 6UJUKKPVI9QU8N0 77 | Friday is Busy :( 78 | 11/5 Subday Today's Plan: 79 | IUNFGO9T40XT1E3 80 | 9/18 Saturday Today's Plan: 81 | JHEZDMIS7SMRDNM 82 | RB1TLORBOJ8NCOP 83 | 9/1 Tuesday Today is Free 84 | 3/9 Monday Today is Free 85 | 6/9 Wednesday Today's Plan: 86 | QYTU2EHH9JMB86G 87 | 7/12 Thursday Today's Plan: 88 | PIOM6MUC77OUVKC 89 | UZVSM8I5KOR1CUR 90 | 8/8 Friday Today is Free 91 | Friday is Free :) 92 | 5/8 Saturday Today's Plan: 93 | DEGG64CQJP78M51 94 | JCTR441NI8JU1UN 95 | 7/3 Tuesday Today's Plan: 96 | 60SSBDNICS4FF42 97 | H5Y5APLN655O6S5 98 | 12/27 Monday Today is Free 99 | 11/9 Wednesday Today is Free 100 | 4/9 Friday Today's Plan: 101 | MBQB75CSTP7EF2G 102 | XA64JT85YEN1GPD 103 | Friday is Busy :( 104 | 12/16 Thursday Today is Free 105 | 5/15 Saturday Today's Plan: 106 | S5A06I1AMH75QK3 107 | VHE9IE6IG2R2WHU 108 | 10/5 Wednesday Today is Free 109 | 6/15 Wednesday Today is Free 110 | 1/12 Thursday Today's Plan: 111 | OSV4JXTU29A7NUN 112 | T3TKSJ53JNL7ZEL 113 | KC7QGZAWDSJTAHT 114 | 4/22 Subday Today's Plan: 115 | 6G5XV62VMEHMHBQ 116 | YY2VPWF6BEI57TG 117 | 1/17 Saturday Today's Plan: 118 | 2ZPJ0N535ZYOBZK 119 | VML7BB22M1ATYC1 120 | 4/28 Subday Today is Free 121 | 4/25 Monday Today is Free 122 | 10/11 Thursday Today's Plan: 123 | YPWU2YRSLHO4F31 124 | WE0E7WRQTUDER92 125 | CCM51RDQKM14QFP 126 | 5/1 Saturday Today is Free 127 | 11/12 Saturday Today's Plan: 128 | N7X0150J8G89MQ3 129 | 3/13 Thursday Today's Plan: 130 | OAC6FWMI19VJOIV 131 | HXZB433K6PL3S2S 132 | 3/5 Monday Today's Plan: 133 | DS42KS1OXC8IZA9 134 | 1/9 Monday Today is Free 135 | 6/25 Friday Today's Plan: 136 | DQ9SSAEU20T35NQ 137 | 3LB44A4SAUUMV9L 138 | W6MXMX9CZ0NW2JV 139 | Friday is Busy :( 140 | 1/4 Thursday Today is Free 141 | 1/19 Tuesday Today's Plan: 142 | 3V175D24G22XTF3 143 | ABBFPJ0U91S1BON 144 | 2/28 Wednesday Today's Plan: 145 | 0JAFAFWBPHAOJLS 146 | 35AEY9N13MO1II9 147 | 3/7 Thursday Today is Free 148 | 6/23 Monday Today's Plan: 149 | 3TIQR0LSQB2VNG1 150 | RO46YBVDBX1KXFS 151 | 10/10 Subday Today's Plan: 152 | MIZXE0PUS66HI2D 153 | 4/5 Thursday Today's Plan: 154 | 2S02EYSE9AWYEBP 155 | 97MVLRAKHMUGYYO 156 | 7/23 Subday Today's Plan: 157 | ZQTW5D41SWGK1QC 158 | Q07KWEUE25KYC8V 159 | 9/11 Thursday Today is Free 160 | 6/18 Tuesday Today is Free 161 | 1/8 Thursday Today's Plan: 162 | F448YGZ8FHRCMQY 163 | AHQJP3XAD2DNR9C 164 | RPHFP0HB0HRMV6N 165 | 6G4FCC7SQG7PBMV 166 | 5/11 Thursday Today's Plan: 167 | GM9CQCA6BH0SWKY 168 | QY21SIUW5M87KW5 169 | 12/26 Wednesday Today is Free 170 | 10/13 Thursday Today's Plan: 171 | NWI6HL5ZXQ0X84D 172 | 3/16 Monday Today is Free 173 | 2/2 Thursday Today is Free 174 | 7/1 Tuesday Today's Plan: 175 | 3CFI9MG3CKVPXN3 176 | 9/22 Saturday Today's Plan: 177 | X4XQPARQTAAR5SN 178 | 11/17 Saturday Today's Plan: 179 | 78BQ7ZQCLHU47N8 180 | 6/11 Friday Today's Plan: 181 | XKO4HP9Q1N2UP0Q 182 | 7FZHIZ1Q3N2EHHX 183 | Friday is Busy :( 184 | 11/10 Thursday Today's Plan: 185 | GAB6F3710KLEV7X 186 | 10/4 Saturday Today's Plan: 187 | WA6MXMRBAE5U2Q0 188 | ITJMGPYN52T3IQW 189 | CTNPB9C3OD58S4M 190 | 3/19 Thursday Today is Free 191 | 5/22 Saturday Today's Plan: 192 | JHJX59UON3QL7RY 193 | 9/15 Wednesday Today is Free 194 | 2/22 Tuesday Today is Free 195 | 9/3 Saturday Today is Free 196 | 5/6 Thursday Today is Free 197 | 9/5 Monday Today's Plan: 198 | 5E0YHVMT68Z4PSB 199 | 12/2 Tuesday Today is Free 200 | 12/9 Subday Today is Free 201 | 7/25 Monday Today's Plan: 202 | T9F0ZMU7WWAK6VC 203 | 6/21 Wednesday Today's Plan: 204 | XPALKKUE8CZ7BB9 205 | 5/18 Tuesday Today is Free 206 | 2/8 Thursday Today is Free 207 | 10/6 Monday Today's Plan: 208 | C081KFH1UNEOMSO 209 | -------------------------------------------------------------------------------- /data/24/1/data4.in: -------------------------------------------------------------------------------- 1 | 100 2 | 10 11 Friday 3 | 12 11 Wednesday 4 | 10 12 Thursday 5 | 9 24 Thursday 6 | 11 6 Wednesday 7 | 8 11 Friday 8 | 9 11 Wednesday 9 | 11 21 Thursday 10 | 9 28 Wednesday 11 | 1 1 Subday 12 | 9 16 Monday 13 | 12 13 Saturday 14 | 9 1 Wednesday 15 | 11 12 Friday 16 | 3 8 Thursday 17 | 7 15 Wednesday 18 | 3 3 Friday 19 | 3 4 Saturday 20 | 10 26 Thursday 21 | 4 28 Monday 22 | 9 2 Subday 23 | 7 10 Monday 24 | 5 4 Friday 25 | 12 20 Friday 26 | 7 8 Friday 27 | 7 27 Thursday 28 | 5 21 Friday 29 | 2 5 Friday 30 | 6 8 Thursday 31 | 2 13 Friday 32 | 12 16 Thursday 33 | 3 20 Subday 34 | 1 9 Subday 35 | 2 4 Subday 36 | 8 4 Subday 37 | 1 11 Tuesday 38 | 3 16 Tuesday 39 | 7 5 Saturday 40 | 11 13 Monday 41 | 6 16 Monday 42 | 4 25 Friday 43 | 2 26 Friday 44 | 12 19 Wednesday 45 | 9 22 Thursday 46 | 11 15 Thursday 47 | 3 5 Tuesday 48 | 4 2 Subday 49 | 12 3 Wednesday 50 | 1 27 Monday 51 | 4 15 Subday 52 | 6 1 Monday 53 | 8 14 Thursday 54 | 10 21 Wednesday 55 | 6 15 Subday 56 | 8 20 Monday 57 | 8 23 Subday 58 | 7 17 Monday 59 | 5 7 Monday 60 | 12 9 Monday 61 | 7 12 Tuesday 62 | 6 2 Thursday 63 | 2 10 Tuesday 64 | 1 28 Friday 65 | 12 5 Subday 66 | 12 6 Subday 67 | 10 14 Friday 68 | 5 1 Wednesday 69 | 5 5 Thursday 70 | 11 27 Wednesday 71 | 3 18 Thursday 72 | 8 12 Friday 73 | 2 12 Wednesday 74 | 7 25 Tuesday 75 | 12 27 Wednesday 76 | 7 22 Monday 77 | 9 18 Tuesday 78 | 7 1 Subday 79 | 4 27 Wednesday 80 | 2 28 Saturday 81 | 2 16 Saturday 82 | 3 23 Thursday 83 | 11 7 Monday 84 | 12 24 Tuesday 85 | 4 19 Saturday 86 | 2 6 Saturday 87 | 3 10 Saturday 88 | 4 10 Saturday 89 | 12 18 Subday 90 | 5 19 Subday 91 | 8 19 Saturday 92 | 9 10 Monday 93 | 2 23 Saturday 94 | 11 23 Thursday 95 | 5 28 Monday 96 | 2 21 Saturday 97 | 1 6 Friday 98 | 7 20 Saturday 99 | 3 17 Friday 100 | 4 6 Friday 101 | 11 25 Thursday 102 | 100 103 | 7 1 U1G624VO3TMFRZ5 104 | 3 16 1O5Z1KGB7AE0L82 105 | 7 5 VFRKYOL0WBRF1NJ 106 | 5 19 NCHG0N4DOZ4CGRY 107 | 2 16 H5HKUOX2RKT15BO 108 | 4 6 BCI39O2KC6YC0S0 109 | 1 1 QLS7W0IFP7BBZBE 110 | 10 14 RN6DPLNSSLINNAS 111 | 2 13 NJ69WCQ1Z69Z26C 112 | 9 18 SDW0DOR4KX1QQEW 113 | 11 23 EV5Z7RFW568760U 114 | 10 12 3UF5K8WHIJXN9TU 115 | 7 8 0Y2NO8G9XXGEQ6J 116 | 1 6 HLQXYLMHSD6UCOI 117 | 1 27 UK35EEG1U01YK0W 118 | 12 20 F9CS3NR1U49LY61 119 | 6 8 MFRDKL5Z3Z3O6B6 120 | 12 11 ZVSPCNJL33HRGHR 121 | 11 13 6IQWP4NA7PT4NN2 122 | 2 13 0EC59G0NUVN1HAQ 123 | 10 12 CO1V5U1H5M0C53Q 124 | 9 22 19K2THVMPTD9VL5 125 | 2 6 U6RYYO1503RH531 126 | 7 10 YFVB5BQ7FQ88J5G 127 | 11 15 69HJ9O4CIGHGPRC 128 | 6 16 N6S87JXTEMK11BH 129 | 3 23 Q6C17WO6XFAGRGM 130 | 3 23 65CTWP9JWSOJDCS 131 | 12 20 DR8K9VA0S77QRMG 132 | 9 22 HA2N5O6NZH6WQV9 133 | 8 19 8CD4OYRWYVBJF06 134 | 8 20 1ZTYC7ZBWIUBLE7 135 | 6 2 2R74215VMMGHZS5 136 | 2 26 M9DHTJ33F1WQ3T7 137 | 3 8 SH5ZJMH86YJDM4U 138 | 6 2 D8GJJXFG079AEHQ 139 | 2 5 AAJR71KGQMS6UZ2 140 | 2 16 RX7U41BB0AE81U6 141 | 7 8 PMV4YT40UG3OOM6 142 | 9 1 SSDHVAHQLUOYEN7 143 | 8 23 BOA5SP8NZLRY0YX 144 | 9 18 GVMY86RYNM18MV3 145 | 3 20 2RXMR0F3IUS8A5Z 146 | 2 5 JAXX3HOQSOXA49I 147 | 3 18 02KZEF3A6EYRCL7 148 | 4 27 WPSTZYFOK693V7V 149 | 2 28 KG4E3Q2SHNYKI91 150 | 8 4 HFJKISFXNPPCX31 151 | 3 8 YQWKTOFRGL8WFIR 152 | 1 9 HGKWIX34ALDP92B 153 | 4 28 64NCMIZZYHCKHTV 154 | 9 18 NUBXER9LI16VSYS 155 | 11 7 AMO3RR9QJGI34DS 156 | 12 13 Y867PF3EIK9AM1R 157 | 7 25 TF4IHYTAU8JKKQ1 158 | 11 23 QEAOBXE3RA9GPI8 159 | 5 5 CG8YVGSFAKO8XQR 160 | 2 21 X9Y5DQLX4AMMS7L 161 | 5 5 819QXWNRJKM2JXK 162 | 7 20 1LXW60TLU5TDQ12 163 | 6 15 NCQF1JK1Z87XPRK 164 | 4 10 046FI3DGOAXG8QL 165 | 9 16 BK9GAD66A1XT234 166 | 3 23 JNGPZYVBAUZD74F 167 | 11 25 SLVCWWK8BCLEX4J 168 | 4 28 6QIB6J235ZGRTC6 169 | 2 26 T9UY2TULD6PU5GW 170 | 11 7 RU0RJ0CPVBCSWH8 171 | 8 14 EQW5RYPWYQZQHI2 172 | 2 6 QYG23ZR188CDYG4 173 | 12 27 YZKK39S75LVFEWN 174 | 9 1 QSDNR6562EQJ1P0 175 | 12 20 ZGNYOHXJDQ1GJXY 176 | 10 11 RUNRB9TOZIHKZCQ 177 | 7 8 EFMTKAL46YOSHBS 178 | 4 28 KGI5QM1JB2CCPDX 179 | 3 10 1KHKV2ET0X26V2H 180 | 7 5 76VI0DKDKLI3E8N 181 | 3 18 L6BZ5LNSLF4JCH1 182 | 1 6 RPMOEGR6BXP1O88 183 | 4 15 C8FZBVP8X4LVOLY 184 | 7 5 QRA7XE0KP5ZHOEX 185 | 3 10 7M2RDLX8QC8W8V4 186 | 11 13 EHP4BZ9SRJZSQB2 187 | 12 3 98T0X6PHO5KGKYS 188 | 3 3 GLH6JUKH3PXCB5X 189 | 4 6 EIWH2DOTCNEYGI7 190 | 8 4 RLJ7O8T99HJL45N 191 | 9 10 P8RCZO5V3T3ESX8 192 | 3 20 NGO37ZLAQIDYNDI 193 | 11 6 M4G5V4E6N0MWC37 194 | 2 28 HIW1B8H803VUE1N 195 | 3 16 EPIW60PZDYM6Z1W 196 | 4 6 QJMVLS430TJIZRR 197 | 8 4 DC893EBBFVPR8EW 198 | 7 20 GKD313FI6C7UQXF 199 | 5 7 OX941K1772UDU7K 200 | 5 7 NGHKSFEYJVBR0I3 201 | 11 25 RHTL6D0E644ITEO 202 | 8 20 RUWL0ER93KP0ZWM 203 | -------------------------------------------------------------------------------- /data/24/1/data4.out: -------------------------------------------------------------------------------- 1 | 10/11 Friday Today's Plan: 2 | RUNRB9TOZIHKZCQ 3 | Friday is Busy :( 4 | 12/11 Wednesday Today's Plan: 5 | ZVSPCNJL33HRGHR 6 | 10/12 Thursday Today's Plan: 7 | 3UF5K8WHIJXN9TU 8 | CO1V5U1H5M0C53Q 9 | 9/24 Thursday Today is Free 10 | 11/6 Wednesday Today's Plan: 11 | M4G5V4E6N0MWC37 12 | 8/11 Friday Today is Free 13 | Friday is Free :) 14 | 9/11 Wednesday Today is Free 15 | 11/21 Thursday Today is Free 16 | 9/28 Wednesday Today is Free 17 | 1/1 Subday Today's Plan: 18 | QLS7W0IFP7BBZBE 19 | 9/16 Monday Today's Plan: 20 | BK9GAD66A1XT234 21 | 12/13 Saturday Today's Plan: 22 | Y867PF3EIK9AM1R 23 | 9/1 Wednesday Today's Plan: 24 | SSDHVAHQLUOYEN7 25 | QSDNR6562EQJ1P0 26 | 11/12 Friday Today is Free 27 | Friday is Free :) 28 | 3/8 Thursday Today's Plan: 29 | SH5ZJMH86YJDM4U 30 | YQWKTOFRGL8WFIR 31 | 7/15 Wednesday Today is Free 32 | 3/3 Friday Today's Plan: 33 | GLH6JUKH3PXCB5X 34 | Friday is Busy :( 35 | 3/4 Saturday Today is Free 36 | 10/26 Thursday Today is Free 37 | 4/28 Monday Today's Plan: 38 | 64NCMIZZYHCKHTV 39 | 6QIB6J235ZGRTC6 40 | KGI5QM1JB2CCPDX 41 | 9/2 Subday Today is Free 42 | 7/10 Monday Today's Plan: 43 | YFVB5BQ7FQ88J5G 44 | 5/4 Friday Today is Free 45 | Friday is Free :) 46 | 12/20 Friday Today's Plan: 47 | F9CS3NR1U49LY61 48 | DR8K9VA0S77QRMG 49 | ZGNYOHXJDQ1GJXY 50 | Friday is Busy :( 51 | 7/8 Friday Today's Plan: 52 | 0Y2NO8G9XXGEQ6J 53 | PMV4YT40UG3OOM6 54 | EFMTKAL46YOSHBS 55 | Friday is Busy :( 56 | 7/27 Thursday Today is Free 57 | 5/21 Friday Today is Free 58 | Friday is Free :) 59 | 2/5 Friday Today's Plan: 60 | AAJR71KGQMS6UZ2 61 | JAXX3HOQSOXA49I 62 | Friday is Busy :( 63 | 6/8 Thursday Today's Plan: 64 | MFRDKL5Z3Z3O6B6 65 | 2/13 Friday Today's Plan: 66 | NJ69WCQ1Z69Z26C 67 | 0EC59G0NUVN1HAQ 68 | Friday is Busy :( 69 | 12/16 Thursday Today is Free 70 | 3/20 Subday Today's Plan: 71 | 2RXMR0F3IUS8A5Z 72 | NGO37ZLAQIDYNDI 73 | 1/9 Subday Today's Plan: 74 | HGKWIX34ALDP92B 75 | 2/4 Subday Today is Free 76 | 8/4 Subday Today's Plan: 77 | HFJKISFXNPPCX31 78 | RLJ7O8T99HJL45N 79 | DC893EBBFVPR8EW 80 | 1/11 Tuesday Today is Free 81 | 3/16 Tuesday Today's Plan: 82 | 1O5Z1KGB7AE0L82 83 | EPIW60PZDYM6Z1W 84 | 7/5 Saturday Today's Plan: 85 | VFRKYOL0WBRF1NJ 86 | 76VI0DKDKLI3E8N 87 | QRA7XE0KP5ZHOEX 88 | 11/13 Monday Today's Plan: 89 | 6IQWP4NA7PT4NN2 90 | EHP4BZ9SRJZSQB2 91 | 6/16 Monday Today's Plan: 92 | N6S87JXTEMK11BH 93 | 4/25 Friday Today is Free 94 | Friday is Free :) 95 | 2/26 Friday Today's Plan: 96 | M9DHTJ33F1WQ3T7 97 | T9UY2TULD6PU5GW 98 | Friday is Busy :( 99 | 12/19 Wednesday Today is Free 100 | 9/22 Thursday Today's Plan: 101 | 19K2THVMPTD9VL5 102 | HA2N5O6NZH6WQV9 103 | 11/15 Thursday Today's Plan: 104 | 69HJ9O4CIGHGPRC 105 | 3/5 Tuesday Today is Free 106 | 4/2 Subday Today is Free 107 | 12/3 Wednesday Today's Plan: 108 | 98T0X6PHO5KGKYS 109 | 1/27 Monday Today's Plan: 110 | UK35EEG1U01YK0W 111 | 4/15 Subday Today's Plan: 112 | C8FZBVP8X4LVOLY 113 | 6/1 Monday Today is Free 114 | 8/14 Thursday Today's Plan: 115 | EQW5RYPWYQZQHI2 116 | 10/21 Wednesday Today is Free 117 | 6/15 Subday Today's Plan: 118 | NCQF1JK1Z87XPRK 119 | 8/20 Monday Today's Plan: 120 | 1ZTYC7ZBWIUBLE7 121 | RUWL0ER93KP0ZWM 122 | 8/23 Subday Today's Plan: 123 | BOA5SP8NZLRY0YX 124 | 7/17 Monday Today is Free 125 | 5/7 Monday Today's Plan: 126 | OX941K1772UDU7K 127 | NGHKSFEYJVBR0I3 128 | 12/9 Monday Today is Free 129 | 7/12 Tuesday Today is Free 130 | 6/2 Thursday Today's Plan: 131 | 2R74215VMMGHZS5 132 | D8GJJXFG079AEHQ 133 | 2/10 Tuesday Today is Free 134 | 1/28 Friday Today is Free 135 | Friday is Free :) 136 | 12/5 Subday Today is Free 137 | 12/6 Subday Today is Free 138 | 10/14 Friday Today's Plan: 139 | RN6DPLNSSLINNAS 140 | Friday is Busy :( 141 | 5/1 Wednesday Today is Free 142 | 5/5 Thursday Today's Plan: 143 | CG8YVGSFAKO8XQR 144 | 819QXWNRJKM2JXK 145 | 11/27 Wednesday Today is Free 146 | 3/18 Thursday Today's Plan: 147 | 02KZEF3A6EYRCL7 148 | L6BZ5LNSLF4JCH1 149 | 8/12 Friday Today is Free 150 | Friday is Free :) 151 | 2/12 Wednesday Today is Free 152 | 7/25 Tuesday Today's Plan: 153 | TF4IHYTAU8JKKQ1 154 | 12/27 Wednesday Today's Plan: 155 | YZKK39S75LVFEWN 156 | 7/22 Monday Today is Free 157 | 9/18 Tuesday Today's Plan: 158 | SDW0DOR4KX1QQEW 159 | GVMY86RYNM18MV3 160 | NUBXER9LI16VSYS 161 | 7/1 Subday Today's Plan: 162 | U1G624VO3TMFRZ5 163 | 4/27 Wednesday Today's Plan: 164 | WPSTZYFOK693V7V 165 | 2/28 Saturday Today's Plan: 166 | KG4E3Q2SHNYKI91 167 | HIW1B8H803VUE1N 168 | 2/16 Saturday Today's Plan: 169 | H5HKUOX2RKT15BO 170 | RX7U41BB0AE81U6 171 | 3/23 Thursday Today's Plan: 172 | Q6C17WO6XFAGRGM 173 | 65CTWP9JWSOJDCS 174 | JNGPZYVBAUZD74F 175 | 11/7 Monday Today's Plan: 176 | AMO3RR9QJGI34DS 177 | RU0RJ0CPVBCSWH8 178 | 12/24 Tuesday Today is Free 179 | 4/19 Saturday Today is Free 180 | 2/6 Saturday Today's Plan: 181 | U6RYYO1503RH531 182 | QYG23ZR188CDYG4 183 | 3/10 Saturday Today's Plan: 184 | 1KHKV2ET0X26V2H 185 | 7M2RDLX8QC8W8V4 186 | 4/10 Saturday Today's Plan: 187 | 046FI3DGOAXG8QL 188 | 12/18 Subday Today is Free 189 | 5/19 Subday Today's Plan: 190 | NCHG0N4DOZ4CGRY 191 | 8/19 Saturday Today's Plan: 192 | 8CD4OYRWYVBJF06 193 | 9/10 Monday Today's Plan: 194 | P8RCZO5V3T3ESX8 195 | 2/23 Saturday Today is Free 196 | 11/23 Thursday Today's Plan: 197 | EV5Z7RFW568760U 198 | QEAOBXE3RA9GPI8 199 | 5/28 Monday Today is Free 200 | 2/21 Saturday Today's Plan: 201 | X9Y5DQLX4AMMS7L 202 | 1/6 Friday Today's Plan: 203 | HLQXYLMHSD6UCOI 204 | RPMOEGR6BXP1O88 205 | Friday is Busy :( 206 | 7/20 Saturday Today's Plan: 207 | 1LXW60TLU5TDQ12 208 | GKD313FI6C7UQXF 209 | 3/17 Friday Today is Free 210 | Friday is Free :) 211 | 4/6 Friday Today's Plan: 212 | BCI39O2KC6YC0S0 213 | EIWH2DOTCNEYGI7 214 | QJMVLS430TJIZRR 215 | Friday is Busy :( 216 | 11/25 Thursday Today's Plan: 217 | SLVCWWK8BCLEX4J 218 | RHTL6D0E644ITEO 219 | -------------------------------------------------------------------------------- /data/24/1/data5.in: -------------------------------------------------------------------------------- 1 | 100 2 | 5 7 Friday 3 | 11 23 Monday 4 | 4 9 Tuesday 5 | 12 19 Tuesday 6 | 11 16 Friday 7 | 10 19 Subday 8 | 1 2 Friday 9 | 9 12 Wednesday 10 | 8 26 Saturday 11 | 1 24 Friday 12 | 3 1 Saturday 13 | 1 12 Thursday 14 | 8 22 Subday 15 | 1 14 Subday 16 | 11 6 Thursday 17 | 9 21 Thursday 18 | 12 17 Tuesday 19 | 7 17 Wednesday 20 | 6 5 Thursday 21 | 8 17 Saturday 22 | 3 10 Tuesday 23 | 6 4 Monday 24 | 2 11 Friday 25 | 6 24 Friday 26 | 7 2 Saturday 27 | 11 1 Monday 28 | 5 10 Wednesday 29 | 12 25 Tuesday 30 | 7 24 Tuesday 31 | 1 23 Tuesday 32 | 11 13 Monday 33 | 10 16 Monday 34 | 6 20 Subday 35 | 3 14 Saturday 36 | 2 23 Saturday 37 | 12 13 Friday 38 | 8 28 Friday 39 | 5 1 Saturday 40 | 1 16 Wednesday 41 | 2 8 Friday 42 | 9 16 Wednesday 43 | 2 28 Friday 44 | 6 15 Tuesday 45 | 6 10 Thursday 46 | 2 22 Saturday 47 | 2 9 Wednesday 48 | 10 9 Tuesday 49 | 10 15 Tuesday 50 | 3 5 Saturday 51 | 12 9 Saturday 52 | 7 16 Wednesday 53 | 8 18 Subday 54 | 3 4 Subday 55 | 8 21 Wednesday 56 | 6 7 Tuesday 57 | 7 1 Wednesday 58 | 4 25 Thursday 59 | 9 6 Tuesday 60 | 10 17 Thursday 61 | 6 19 Tuesday 62 | 4 7 Wednesday 63 | 11 22 Tuesday 64 | 9 17 Friday 65 | 3 9 Tuesday 66 | 1 11 Monday 67 | 3 7 Friday 68 | 3 15 Tuesday 69 | 3 20 Monday 70 | 7 5 Monday 71 | 11 14 Monday 72 | 11 3 Thursday 73 | 11 18 Thursday 74 | 2 5 Wednesday 75 | 9 24 Friday 76 | 12 20 Tuesday 77 | 10 13 Friday 78 | 11 26 Monday 79 | 12 6 Thursday 80 | 8 16 Wednesday 81 | 10 25 Tuesday 82 | 11 12 Wednesday 83 | 7 18 Tuesday 84 | 9 1 Wednesday 85 | 10 5 Saturday 86 | 2 15 Thursday 87 | 11 28 Saturday 88 | 6 13 Subday 89 | 7 9 Monday 90 | 2 14 Friday 91 | 4 15 Friday 92 | 3 19 Monday 93 | 2 12 Friday 94 | 7 20 Thursday 95 | 4 20 Subday 96 | 4 27 Wednesday 97 | 1 13 Saturday 98 | 5 20 Wednesday 99 | 2 3 Friday 100 | 6 22 Tuesday 101 | 6 2 Wednesday 102 | 100 103 | 2 8 WS5DP0OZ8XDB4TU 104 | 11 12 X06MEUKEXN2IN22 105 | 7 2 1TQHCTCUIA6RED2 106 | 2 14 UKQ993BXDS6V84S 107 | 12 20 8XQMXYWF0Q5GHJV 108 | 12 6 DZU8L15C6ILAHJD 109 | 9 12 REHFVLZW57CKF7D 110 | 3 7 HVUDMZ3289GNQH1 111 | 11 23 Y6ZRIMC913EY5GN 112 | 6 10 ATTQC7U6MB8W0VV 113 | 1 16 X9UU7J7H8G9XV0A 114 | 7 20 AGNS72W1G3QLFDS 115 | 3 10 IAVV6TLWLI0152F 116 | 3 20 581B63YPW56W580 117 | 4 27 FOE58ZF89H6D0A4 118 | 8 18 56YHOM9LX6KNJVU 119 | 3 19 3O34KH81PB0CQ9M 120 | 8 22 W1MBOO4E5POZXJQ 121 | 10 13 XIGNMR9IDOWYIZM 122 | 7 9 01OCBO7LZKDQ97B 123 | 4 9 XAP7B2YWZK4S6GJ 124 | 3 1 FF0LG9B46O4JZXI 125 | 3 20 X40EPE1AAX1WL55 126 | 3 15 Z2V4NM0Q04CZML7 127 | 3 10 5K9LDMBZUV8HJJD 128 | 7 24 LFL59PU6IUO7N3S 129 | 12 9 EE2BO8Y1V29BF9Y 130 | 5 1 E5072QPG42C3UUW 131 | 9 24 R4VM9H9ISR9LMZ4 132 | 4 9 GEE0G7Y99NH7MV2 133 | 5 7 NYYR60YU35AG3KQ 134 | 10 25 GN65RZLFSEH6YM1 135 | 1 14 QFZGTNT6M6SSX6C 136 | 3 7 8KRE3P1RZ4MAM7H 137 | 1 2 E3IKSTXE262U1NA 138 | 12 20 UZ9NYWKLLM6AC8L 139 | 2 28 TQ7KNSZH6L5Y7OT 140 | 11 1 DFGT69329LAIVR8 141 | 10 17 MKGZMMLZZ27QR8G 142 | 5 1 WZNLUT3F0ZFJFSI 143 | 8 28 I7F3HWOR9KRHZ67 144 | 2 22 6D5JEL9E1V652HM 145 | 9 24 23V1USXVKD8U6FM 146 | 6 4 W8PEZ754PM5B3AM 147 | 11 3 0XNOCM6NTK57WFK 148 | 11 14 HH9G0UYFUOCDY0K 149 | 2 8 ARBW8LQTNUCETEX 150 | 7 9 E6WB3R3N1OI56L2 151 | 2 12 J6Q6Z8Y02WBEBVC 152 | 11 12 DQPRX1WKFO0J1OR 153 | 2 15 KJS6ZZNNEFG5ZQU 154 | 6 4 6VP0U2Y7CXVEUQP 155 | 10 16 22SFWK2QFWTJB4T 156 | 7 2 1HUNSZHM5IWOVVA 157 | 6 15 1V8ZEZPDIPLIOPM 158 | 11 26 MWFU5UUDD50IITS 159 | 2 5 K63U8LKLN5GUI6K 160 | 1 13 F4WO0HTZ66MA9M5 161 | 6 22 EKBVVD4VBQERJAQ 162 | 6 19 04SZKHBYPFIH4F3 163 | 12 6 AZV6A5VQ99C02FZ 164 | 3 5 PZK6D1YFHGLNM1O 165 | 3 1 6XNLS0JJS4315IS 166 | 3 7 KFIVNIK7RI5ZMU8 167 | 8 28 4R3A5BUV6V0XRUY 168 | 12 20 01HRUPPU6V11S7J 169 | 6 13 USCFPFG4ODJP756 170 | 11 6 JYDMVQUSUOOW44R 171 | 10 13 CIV8R44A55YII3N 172 | 8 17 CB77C4A0PA6C51Y 173 | 9 1 06SYV4PAYT5SHP2 174 | 8 16 OOX1UT6IZ227JYT 175 | 3 14 QHJZE3RUZLQEQEJ 176 | 5 10 3ZKKNAV49WYD9ZJ 177 | 6 2 XTAOYW2WX0451K4 178 | 2 5 0PCYI7WA4BJME5M 179 | 4 15 GIO3ZGT8Y4UBQAY 180 | 3 4 BJFN5I5BA2XHNL0 181 | 7 17 5HKG7WH3LQTE7VE 182 | 6 19 25N9P2GAWOBNNDR 183 | 3 5 4HD4T9EX9YSGIX3 184 | 1 23 IDC125N1J5UF33K 185 | 4 15 D4ZJBM2OARHDXO2 186 | 11 16 JWHQQNTVK2JM1QM 187 | 5 10 3S1LL27524HD0IJ 188 | 4 7 CSSKTZ03HCRSWBM 189 | 9 12 6RRDARN33WA12S5 190 | 2 14 N7BQXAJT890GT0L 191 | 1 11 BK38EM2UZ3K2HHH 192 | 6 10 FW2VOMHTCZTXZKF 193 | 10 16 K7Z2F6VGZM2ZJUV 194 | 5 7 EF7OENPN4UIBT5N 195 | 3 7 CF7F7B03M94YJDG 196 | 4 27 YZY58W1VK8DUGKL 197 | 10 15 F68HBACV59FRGDF 198 | 1 11 Z5O5W498EL3CCKX 199 | 3 19 YLI8S2VQYKDJ81O 200 | 4 27 KA46TSCO59Q97MO 201 | 1 13 GR4SE3FL2NRLD0G 202 | 3 4 2GR018MZ62NRS3K 203 | -------------------------------------------------------------------------------- /data/24/1/data6.in: -------------------------------------------------------------------------------- 1 | 100 2 | 8 10 Wednesday 3 | 1 19 Saturday 4 | 3 6 Subday 5 | 2 20 Thursday 6 | 4 5 Saturday 7 | 4 9 Thursday 8 | 9 9 Tuesday 9 | 7 3 Tuesday 10 | 8 27 Subday 11 | 9 12 Friday 12 | 2 3 Monday 13 | 8 17 Monday 14 | 9 11 Thursday 15 | 4 4 Friday 16 | 8 25 Thursday 17 | 3 27 Thursday 18 | 3 16 Tuesday 19 | 1 1 Thursday 20 | 10 8 Saturday 21 | 12 11 Monday 22 | 1 27 Friday 23 | 5 21 Tuesday 24 | 4 19 Tuesday 25 | 3 11 Tuesday 26 | 10 6 Saturday 27 | 10 28 Thursday 28 | 9 7 Thursday 29 | 5 1 Wednesday 30 | 7 10 Monday 31 | 11 9 Thursday 32 | 10 5 Tuesday 33 | 10 17 Tuesday 34 | 1 13 Thursday 35 | 3 7 Saturday 36 | 8 7 Saturday 37 | 7 27 Friday 38 | 10 22 Tuesday 39 | 7 2 Friday 40 | 12 2 Tuesday 41 | 7 1 Friday 42 | 10 19 Thursday 43 | 5 4 Friday 44 | 11 26 Tuesday 45 | 7 22 Tuesday 46 | 11 24 Friday 47 | 11 14 Saturday 48 | 3 17 Tuesday 49 | 5 11 Monday 50 | 9 27 Subday 51 | 8 28 Tuesday 52 | 9 14 Saturday 53 | 5 20 Saturday 54 | 3 22 Wednesday 55 | 8 9 Saturday 56 | 9 21 Thursday 57 | 1 2 Wednesday 58 | 2 28 Monday 59 | 8 6 Tuesday 60 | 6 13 Saturday 61 | 1 9 Subday 62 | 2 27 Monday 63 | 10 23 Saturday 64 | 4 28 Saturday 65 | 1 7 Wednesday 66 | 11 17 Monday 67 | 12 27 Tuesday 68 | 12 18 Subday 69 | 10 3 Tuesday 70 | 12 19 Monday 71 | 9 8 Tuesday 72 | 10 14 Wednesday 73 | 10 24 Saturday 74 | 1 15 Saturday 75 | 3 21 Friday 76 | 5 18 Friday 77 | 3 3 Saturday 78 | 4 26 Wednesday 79 | 10 21 Thursday 80 | 9 23 Wednesday 81 | 7 16 Tuesday 82 | 2 8 Subday 83 | 2 23 Monday 84 | 2 4 Saturday 85 | 3 25 Thursday 86 | 2 17 Monday 87 | 2 13 Tuesday 88 | 8 3 Subday 89 | 5 17 Friday 90 | 5 13 Monday 91 | 12 15 Friday 92 | 11 13 Thursday 93 | 1 20 Friday 94 | 8 5 Monday 95 | 12 24 Wednesday 96 | 12 12 Wednesday 97 | 8 22 Thursday 98 | 3 24 Tuesday 99 | 7 23 Wednesday 100 | 12 1 Wednesday 101 | 1 4 Wednesday 102 | 100 103 | 7 10 ITTL1XL2TKRD0O7 104 | 10 8 QFLG5089Q1IRDG3 105 | 8 22 KKD6XRQX16V45IG 106 | 3 24 2CKJBFC6PRB0Y8I 107 | 8 27 QR3UNFYBNE63WK7 108 | 9 9 X1U43BWJSTTEYFH 109 | 9 21 NFX3ERHZHBR5M0R 110 | 1 4 XMPPFG97GF050K8 111 | 3 24 NYVWTSPGQP7KUVL 112 | 3 3 11YD3CAB6EP3PCN 113 | 10 3 SEF3SN4NCX8HAED 114 | 3 7 HQ6IXACT7KH7QRV 115 | 2 4 9Z3IEBMEUCQNEKJ 116 | 8 9 XH7VB8GL8447DAM 117 | 5 4 184JFI7OEBAUZS6 118 | 2 4 8IYDLJH1WT7UW8C 119 | 10 3 FTN6XDFEWCE5U79 120 | 3 11 VD7TLNOG6S1RPW2 121 | 6 13 OYTIYOPUS8QYO8D 122 | 12 15 U7I6E92PBBRGXS4 123 | 8 3 7D0M2WKLTLFNFP2 124 | 5 1 CPSOP876HU0ZLNB 125 | 8 5 SEW51UPK9KE565H 126 | 1 4 4PEL6VHLLB3GUSY 127 | 8 22 R7C53X6DRIRVEEL 128 | 8 10 CKIQ2BV27IE4UNQ 129 | 8 17 Z07O8MXX90DJMVB 130 | 11 26 X7ML6IQVLAD8DRB 131 | 12 2 W4WS8NGZHPYB2IE 132 | 11 13 V51OAN8WVI4QQ1Z 133 | 7 1 N33EX2SW5QXALZL 134 | 12 15 YNY93EL94S1BWSW 135 | 11 14 TW5Q8RZ4BTME8R2 136 | 2 27 O2KYGFE7HJ42ORO 137 | 5 17 ZFUU297K2L3UDPR 138 | 9 14 0NZBT1DDYLYBEJT 139 | 8 10 AJ55QLJ3LVXCSB5 140 | 3 17 ZAPP7REREAULGCW 141 | 10 6 MXWISXRH1VGEXTD 142 | 12 11 AOVUEJ1I62I71Y4 143 | 5 11 ELW4OISR7G18SDN 144 | 3 3 H7YD70M8FQ7XPS7 145 | 12 11 ZTM3WPQK4ICERX4 146 | 8 27 VKD1LA7JPP9EJRV 147 | 4 19 8T8CTCAKAFN1TX4 148 | 1 20 4GFJTJ22CH1ABG1 149 | 11 13 LC6R8LDARN23EXJ 150 | 9 27 X8L6OU3PXG73ERG 151 | 10 22 D8PIB1CY7R6I0Q2 152 | 9 27 75B8VTICTYP40R0 153 | 4 5 VRG387Z37DAK566 154 | 10 5 FPD0O6SD8VJQ6ZB 155 | 2 20 SO2GWVA7CTD6NEI 156 | 3 21 4W6ZKK6MOP94THE 157 | 10 17 658HZRSABLTSOUE 158 | 12 18 C7V56Z0EADHTG8R 159 | 9 14 60DQD6P749XSMZ3 160 | 1 4 GKS7RVU71RQDXHY 161 | 8 10 VEHSGNOHUZ90PNK 162 | 9 11 6YWNAQO0RLHB681 163 | 9 14 98SS5OY3TMSHY6R 164 | 5 4 C2Q39J9CNNW3JCT 165 | 5 11 J5BS3STGC2O87UW 166 | 5 4 HN3CRQ76BRKFVAD 167 | 2 4 2W3NOM589J99JF2 168 | 1 15 TU36VM0XP1Q3PS4 169 | 2 27 Y5O7CMZM0H44FPE 170 | 9 8 M5H8IRL8XYP7IS2 171 | 2 23 LL7HE3XI4XUHOS0 172 | 7 23 S1KBPAC7J0M3F41 173 | 2 27 P2YWBQM7PSXWZIE 174 | 2 23 3XM4KUJYCCBZGAW 175 | 3 21 85QBP79AJGFPMKQ 176 | 8 17 MJVAZHI5QFRVCBH 177 | 1 1 RP75R6FEQ2MI74U 178 | 11 9 0WCVVLFFCBNI25D 179 | 2 13 9CSVGJ6PBMAPQ5N 180 | 10 19 YMSAENSTLONP7A8 181 | 9 9 DODQG82C10SVNPO 182 | 2 4 TV9B6EELQ0JZPGP 183 | 10 14 N0MUGN1516L8OFV 184 | 1 19 XQU0ILHGM60W3OV 185 | 5 18 118NM6QJO53NEMA 186 | 8 28 QXEWU708PJN87E3 187 | 5 11 SRUF9W6HE514ZWJ 188 | 8 10 Q5JBAV5AMNKFJEH 189 | 5 21 6H4BQ2BO4CGH6BN 190 | 10 19 U8CVCTF0BEYIBNU 191 | 3 24 FMV69B2R9XGE8L1 192 | 10 22 HZ2RIU0HA7OHA3X 193 | 10 21 7W0KCIMCV4CXSAU 194 | 7 16 JC4WGLQG86HLHP7 195 | 1 4 NBGCVDVH3YV9SHL 196 | 1 4 NG0NBRPD8A4AX1E 197 | 9 12 KI5OUR417OMYR9F 198 | 5 17 UHPTNULSCF8CNJN 199 | 2 27 MPTIFDAMRM4BV11 200 | 12 11 LYXB5BIXL31SAAC 201 | 1 4 FAGGAZEP11I5IL8 202 | 2 3 48APSMMIFRW2T95 203 | -------------------------------------------------------------------------------- /data/24/1/data6.out: -------------------------------------------------------------------------------- 1 | 8/10 Wednesday Today's Plan: 2 | CKIQ2BV27IE4UNQ 3 | AJ55QLJ3LVXCSB5 4 | VEHSGNOHUZ90PNK 5 | Q5JBAV5AMNKFJEH 6 | 1/19 Saturday Today's Plan: 7 | XQU0ILHGM60W3OV 8 | 3/6 Subday Today is Free 9 | 2/20 Thursday Today's Plan: 10 | SO2GWVA7CTD6NEI 11 | 4/5 Saturday Today's Plan: 12 | VRG387Z37DAK566 13 | 4/9 Thursday Today is Free 14 | 9/9 Tuesday Today's Plan: 15 | X1U43BWJSTTEYFH 16 | DODQG82C10SVNPO 17 | 7/3 Tuesday Today is Free 18 | 8/27 Subday Today's Plan: 19 | QR3UNFYBNE63WK7 20 | VKD1LA7JPP9EJRV 21 | 9/12 Friday Today's Plan: 22 | KI5OUR417OMYR9F 23 | Friday is Busy :( 24 | 2/3 Monday Today's Plan: 25 | 48APSMMIFRW2T95 26 | 8/17 Monday Today's Plan: 27 | Z07O8MXX90DJMVB 28 | MJVAZHI5QFRVCBH 29 | 9/11 Thursday Today's Plan: 30 | 6YWNAQO0RLHB681 31 | 4/4 Friday Today is Free 32 | Friday is Free :) 33 | 8/25 Thursday Today is Free 34 | 3/27 Thursday Today is Free 35 | 3/16 Tuesday Today is Free 36 | 1/1 Thursday Today's Plan: 37 | RP75R6FEQ2MI74U 38 | 10/8 Saturday Today's Plan: 39 | QFLG5089Q1IRDG3 40 | 12/11 Monday Today's Plan: 41 | AOVUEJ1I62I71Y4 42 | ZTM3WPQK4ICERX4 43 | LYXB5BIXL31SAAC 44 | 1/27 Friday Today is Free 45 | Friday is Free :) 46 | 5/21 Tuesday Today's Plan: 47 | 6H4BQ2BO4CGH6BN 48 | 4/19 Tuesday Today's Plan: 49 | 8T8CTCAKAFN1TX4 50 | 3/11 Tuesday Today's Plan: 51 | VD7TLNOG6S1RPW2 52 | 10/6 Saturday Today's Plan: 53 | MXWISXRH1VGEXTD 54 | 10/28 Thursday Today is Free 55 | 9/7 Thursday Today is Free 56 | 5/1 Wednesday Today's Plan: 57 | CPSOP876HU0ZLNB 58 | 7/10 Monday Today's Plan: 59 | ITTL1XL2TKRD0O7 60 | 11/9 Thursday Today's Plan: 61 | 0WCVVLFFCBNI25D 62 | 10/5 Tuesday Today's Plan: 63 | FPD0O6SD8VJQ6ZB 64 | 10/17 Tuesday Today's Plan: 65 | 658HZRSABLTSOUE 66 | 1/13 Thursday Today is Free 67 | 3/7 Saturday Today's Plan: 68 | HQ6IXACT7KH7QRV 69 | 8/7 Saturday Today is Free 70 | 7/27 Friday Today is Free 71 | Friday is Free :) 72 | 10/22 Tuesday Today's Plan: 73 | D8PIB1CY7R6I0Q2 74 | HZ2RIU0HA7OHA3X 75 | 7/2 Friday Today is Free 76 | Friday is Free :) 77 | 12/2 Tuesday Today's Plan: 78 | W4WS8NGZHPYB2IE 79 | 7/1 Friday Today's Plan: 80 | N33EX2SW5QXALZL 81 | Friday is Busy :( 82 | 10/19 Thursday Today's Plan: 83 | YMSAENSTLONP7A8 84 | U8CVCTF0BEYIBNU 85 | 5/4 Friday Today's Plan: 86 | 184JFI7OEBAUZS6 87 | C2Q39J9CNNW3JCT 88 | HN3CRQ76BRKFVAD 89 | Friday is Busy :( 90 | 11/26 Tuesday Today's Plan: 91 | X7ML6IQVLAD8DRB 92 | 7/22 Tuesday Today is Free 93 | 11/24 Friday Today is Free 94 | Friday is Free :) 95 | 11/14 Saturday Today's Plan: 96 | TW5Q8RZ4BTME8R2 97 | 3/17 Tuesday Today's Plan: 98 | ZAPP7REREAULGCW 99 | 5/11 Monday Today's Plan: 100 | ELW4OISR7G18SDN 101 | J5BS3STGC2O87UW 102 | SRUF9W6HE514ZWJ 103 | 9/27 Subday Today's Plan: 104 | X8L6OU3PXG73ERG 105 | 75B8VTICTYP40R0 106 | 8/28 Tuesday Today's Plan: 107 | QXEWU708PJN87E3 108 | 9/14 Saturday Today's Plan: 109 | 0NZBT1DDYLYBEJT 110 | 60DQD6P749XSMZ3 111 | 98SS5OY3TMSHY6R 112 | 5/20 Saturday Today is Free 113 | 3/22 Wednesday Today is Free 114 | 8/9 Saturday Today's Plan: 115 | XH7VB8GL8447DAM 116 | 9/21 Thursday Today's Plan: 117 | NFX3ERHZHBR5M0R 118 | 1/2 Wednesday Today is Free 119 | 2/28 Monday Today is Free 120 | 8/6 Tuesday Today is Free 121 | 6/13 Saturday Today's Plan: 122 | OYTIYOPUS8QYO8D 123 | 1/9 Subday Today is Free 124 | 2/27 Monday Today's Plan: 125 | O2KYGFE7HJ42ORO 126 | Y5O7CMZM0H44FPE 127 | P2YWBQM7PSXWZIE 128 | MPTIFDAMRM4BV11 129 | 10/23 Saturday Today is Free 130 | 4/28 Saturday Today is Free 131 | 1/7 Wednesday Today is Free 132 | 11/17 Monday Today is Free 133 | 12/27 Tuesday Today is Free 134 | 12/18 Subday Today's Plan: 135 | C7V56Z0EADHTG8R 136 | 10/3 Tuesday Today's Plan: 137 | SEF3SN4NCX8HAED 138 | FTN6XDFEWCE5U79 139 | 12/19 Monday Today is Free 140 | 9/8 Tuesday Today's Plan: 141 | M5H8IRL8XYP7IS2 142 | 10/14 Wednesday Today's Plan: 143 | N0MUGN1516L8OFV 144 | 10/24 Saturday Today is Free 145 | 1/15 Saturday Today's Plan: 146 | TU36VM0XP1Q3PS4 147 | 3/21 Friday Today's Plan: 148 | 4W6ZKK6MOP94THE 149 | 85QBP79AJGFPMKQ 150 | Friday is Busy :( 151 | 5/18 Friday Today's Plan: 152 | 118NM6QJO53NEMA 153 | Friday is Busy :( 154 | 3/3 Saturday Today's Plan: 155 | 11YD3CAB6EP3PCN 156 | H7YD70M8FQ7XPS7 157 | 4/26 Wednesday Today is Free 158 | 10/21 Thursday Today's Plan: 159 | 7W0KCIMCV4CXSAU 160 | 9/23 Wednesday Today is Free 161 | 7/16 Tuesday Today's Plan: 162 | JC4WGLQG86HLHP7 163 | 2/8 Subday Today is Free 164 | 2/23 Monday Today's Plan: 165 | LL7HE3XI4XUHOS0 166 | 3XM4KUJYCCBZGAW 167 | 2/4 Saturday Today's Plan: 168 | 9Z3IEBMEUCQNEKJ 169 | 8IYDLJH1WT7UW8C 170 | 2W3NOM589J99JF2 171 | TV9B6EELQ0JZPGP 172 | 3/25 Thursday Today is Free 173 | 2/17 Monday Today is Free 174 | 2/13 Tuesday Today's Plan: 175 | 9CSVGJ6PBMAPQ5N 176 | 8/3 Subday Today's Plan: 177 | 7D0M2WKLTLFNFP2 178 | 5/17 Friday Today's Plan: 179 | ZFUU297K2L3UDPR 180 | UHPTNULSCF8CNJN 181 | Friday is Busy :( 182 | 5/13 Monday Today is Free 183 | 12/15 Friday Today's Plan: 184 | U7I6E92PBBRGXS4 185 | YNY93EL94S1BWSW 186 | Friday is Busy :( 187 | 11/13 Thursday Today's Plan: 188 | V51OAN8WVI4QQ1Z 189 | LC6R8LDARN23EXJ 190 | 1/20 Friday Today's Plan: 191 | 4GFJTJ22CH1ABG1 192 | Friday is Busy :( 193 | 8/5 Monday Today's Plan: 194 | SEW51UPK9KE565H 195 | 12/24 Wednesday Today is Free 196 | 12/12 Wednesday Today is Free 197 | 8/22 Thursday Today's Plan: 198 | KKD6XRQX16V45IG 199 | R7C53X6DRIRVEEL 200 | 3/24 Tuesday Today's Plan: 201 | 2CKJBFC6PRB0Y8I 202 | NYVWTSPGQP7KUVL 203 | FMV69B2R9XGE8L1 204 | 7/23 Wednesday Today's Plan: 205 | S1KBPAC7J0M3F41 206 | 12/1 Wednesday Today is Free 207 | 1/4 Wednesday Today's Plan: 208 | XMPPFG97GF050K8 209 | 4PEL6VHLLB3GUSY 210 | GKS7RVU71RQDXHY 211 | NBGCVDVH3YV9SHL 212 | NG0NBRPD8A4AX1E 213 | FAGGAZEP11I5IL8 214 | -------------------------------------------------------------------------------- /data/24/1/data7.in: -------------------------------------------------------------------------------- 1 | 100 2 | 2 25 Tuesday 3 | 2 3 Friday 4 | 10 5 Saturday 5 | 9 14 Saturday 6 | 6 5 Monday 7 | 10 1 Subday 8 | 7 15 Friday 9 | 11 20 Monday 10 | 8 17 Monday 11 | 6 7 Saturday 12 | 11 26 Thursday 13 | 1 15 Thursday 14 | 3 10 Tuesday 15 | 10 11 Monday 16 | 12 9 Wednesday 17 | 8 21 Wednesday 18 | 3 11 Friday 19 | 10 2 Subday 20 | 10 4 Tuesday 21 | 9 3 Thursday 22 | 8 27 Thursday 23 | 7 18 Subday 24 | 6 20 Thursday 25 | 7 12 Friday 26 | 7 10 Saturday 27 | 2 1 Monday 28 | 9 2 Saturday 29 | 3 24 Monday 30 | 1 25 Friday 31 | 12 19 Friday 32 | 2 14 Monday 33 | 9 23 Saturday 34 | 11 25 Tuesday 35 | 7 24 Monday 36 | 8 2 Subday 37 | 10 23 Monday 38 | 10 28 Saturday 39 | 8 19 Tuesday 40 | 5 7 Monday 41 | 11 5 Monday 42 | 3 17 Saturday 43 | 11 6 Thursday 44 | 6 1 Friday 45 | 9 7 Monday 46 | 2 21 Friday 47 | 3 23 Monday 48 | 3 18 Friday 49 | 8 3 Thursday 50 | 1 10 Monday 51 | 1 8 Saturday 52 | 4 10 Subday 53 | 2 13 Subday 54 | 5 21 Thursday 55 | 1 26 Wednesday 56 | 6 12 Saturday 57 | 6 27 Subday 58 | 7 25 Saturday 59 | 7 5 Tuesday 60 | 12 20 Friday 61 | 6 11 Tuesday 62 | 10 25 Monday 63 | 12 17 Subday 64 | 4 7 Thursday 65 | 4 14 Tuesday 66 | 8 1 Tuesday 67 | 1 28 Saturday 68 | 5 14 Saturday 69 | 7 8 Monday 70 | 7 20 Saturday 71 | 12 13 Friday 72 | 1 13 Friday 73 | 1 6 Wednesday 74 | 6 19 Saturday 75 | 11 23 Monday 76 | 11 3 Subday 77 | 1 16 Thursday 78 | 11 22 Saturday 79 | 3 16 Tuesday 80 | 2 22 Subday 81 | 4 27 Saturday 82 | 4 11 Friday 83 | 9 21 Friday 84 | 3 20 Monday 85 | 8 26 Subday 86 | 9 10 Saturday 87 | 12 4 Tuesday 88 | 4 2 Friday 89 | 11 27 Thursday 90 | 5 23 Subday 91 | 3 27 Saturday 92 | 8 20 Friday 93 | 6 15 Subday 94 | 4 13 Monday 95 | 12 25 Tuesday 96 | 11 4 Subday 97 | 12 12 Saturday 98 | 3 4 Tuesday 99 | 5 6 Tuesday 100 | 9 24 Subday 101 | 7 26 Saturday 102 | 100 103 | 7 26 7JY52H7Y1A2NUOR 104 | 11 5 LXVZ2YW4TPSFQRP 105 | 6 5 4LQJIM3TVZK5XXP 106 | 1 16 UDVR11AA18YNGU1 107 | 12 13 XJOOF16HX8U5OM0 108 | 10 28 BG3EZXV77QO8WX5 109 | 10 2 YK83W6IQF6Z3T5C 110 | 11 26 0UV9UHPEY1DLTB8 111 | 3 27 S881P4RCR35TSJT 112 | 3 24 M4HLDVEBQ1PMMNL 113 | 6 20 XQFKZXDYEIWPNOJ 114 | 7 18 KTS40OMHG4ELFG8 115 | 7 20 O25TS441F6CRWGG 116 | 9 21 KR8PPEVULG90261 117 | 7 26 DOTDLTQW8C8HRGL 118 | 12 20 SGVFJLHFFR8BEKP 119 | 2 14 BGDH8JYC6DGJROM 120 | 6 5 Y3M9W1CP7W956WI 121 | 3 11 CTS2FPLLOWF053N 122 | 10 28 ZVRMO48V07OIXNU 123 | 9 2 K50TGBD20H5B5HH 124 | 12 12 35LGBH5J09Z6DJF 125 | 7 15 201CUK6G4EK2GTX 126 | 2 14 4UCVWIP2FIYZQRN 127 | 2 21 N3MU2TJUOAETFXW 128 | 4 2 78AGR85O61TKX45 129 | 8 20 1YFPDL5TB8ZVD14 130 | 12 20 PH3D5LL7ADPK3QW 131 | 6 27 RDQPLTILJET0SSR 132 | 5 14 BMBTBCNPRG3SXOH 133 | 9 24 1XLFXP5HE5T4817 134 | 3 20 0H4EU7III19YIJ2 135 | 9 23 4JT95CS4R3NO5N2 136 | 8 1 UVNDDKQ09VHG5CI 137 | 2 21 47UGRRCWNDQ2NTB 138 | 9 10 T8QAR5AAHVCQWL4 139 | 11 20 8V1CUAEI57FVJDY 140 | 10 23 D5SZY8ZTHF9SV4B 141 | 11 22 L8X5E19IE4VQIZC 142 | 4 7 JHYN8LMP2BAYY64 143 | 1 15 SOXNXV21C7A7FH6 144 | 7 26 8QBVMZRYQ8O5XZ7 145 | 8 1 T482V0BDLA40A82 146 | 7 24 8XB8ZPACJO3B2DQ 147 | 3 11 LDYLGALZNW6SFN1 148 | 3 27 PT8ZHLHSDHY23EP 149 | 5 6 PYVUFH0KE4J0DVN 150 | 9 3 TBRWLCB7FO49ICX 151 | 1 8 COKYCZMNHDPF3OX 152 | 5 21 P2LG6WSSKT2G2MX 153 | 1 28 NFR1ID6RXEQDDUW 154 | 9 24 88PASK0PLS1NLI6 155 | 1 15 V28ES99R6OPEI67 156 | 11 27 Z53Z0J1GZ8DVPUD 157 | 11 6 BVY0UY1I42FO4QT 158 | 12 12 VLS65JBNX05N7WR 159 | 10 4 VISSXZQEW4V31AO 160 | 7 24 DPH3UC0WOMYSWKT 161 | 4 27 P1I30GLJV4E0UXT 162 | 10 23 2A80R47ZCVNH270 163 | 2 1 NH8ON7EUPD8VCQS 164 | 12 13 IUTWH6XI7MOJ58P 165 | 9 2 V1DF2AB8GOWD4J9 166 | 1 16 UP8RU8JKGEN4CJ5 167 | 3 16 SV1JK9CU2SR77B8 168 | 11 25 XTNPBMWU51F5YZF 169 | 5 23 JW51ZJ0R1T8G7RV 170 | 8 27 IPP4NDFYFSGH9RZ 171 | 12 13 KVKAA5WNL9WXG8E 172 | 8 27 RWC1ERGQVVUL2SB 173 | 1 15 TABERQWYW7HYBOA 174 | 7 24 LDAR251FXU9M42L 175 | 1 28 MCO8M340JXDNSZ6 176 | 6 19 75V8P22E7D2N9ZC 177 | 9 24 824YIIOANEQBD0Q 178 | 7 20 ZEVA3IEBFRW8HNB 179 | 1 26 5XYRBUHD06NQBLC 180 | 6 27 6449VZ877BI5YVK 181 | 9 7 XE7RB9TLG9K9KQG 182 | 5 21 DU6CUID8JCSBW3U 183 | 12 17 FUJPATFH8VBVSXY 184 | 5 14 UN7AN0AWUUC0N4U 185 | 1 26 1HGVZKSUCF703ZT 186 | 3 10 90L4XO2HQG2SQ5B 187 | 3 11 GHKITQ7OH6HFKNI 188 | 1 26 0E8CNP4EYEVV197 189 | 1 13 XYIOGU5PTREO3MZ 190 | 4 11 EHWCMZR8FNFCWBY 191 | 1 28 JZQZEAUMBXK17DT 192 | 12 13 L3Q3IV08IHD5KML 193 | 2 25 RNA8TW62DM0YV7J 194 | 12 17 3B78YSXAZ7ZPMM5 195 | 12 20 OD3G2Q3C2HZWSLN 196 | 12 9 KI7HP8OOTX7FJMB 197 | 5 14 71TC998MXAV762M 198 | 6 19 MQK5KC0DD6MV2SH 199 | 12 4 LY4VKNL3GUQGAGX 200 | 12 25 2O52RIU4LDBVP98 201 | 2 1 V8MTWMUFQXENLZ0 202 | 6 20 MMRII4LMJVOKTVG 203 | -------------------------------------------------------------------------------- /data/24/1/data7.out: -------------------------------------------------------------------------------- 1 | 2/25 Tuesday Today's Plan: 2 | RNA8TW62DM0YV7J 3 | 2/3 Friday Today is Free 4 | Friday is Free :) 5 | 10/5 Saturday Today is Free 6 | 9/14 Saturday Today is Free 7 | 6/5 Monday Today's Plan: 8 | 4LQJIM3TVZK5XXP 9 | Y3M9W1CP7W956WI 10 | 10/1 Subday Today is Free 11 | 7/15 Friday Today's Plan: 12 | 201CUK6G4EK2GTX 13 | Friday is Busy :( 14 | 11/20 Monday Today's Plan: 15 | 8V1CUAEI57FVJDY 16 | 8/17 Monday Today is Free 17 | 6/7 Saturday Today is Free 18 | 11/26 Thursday Today's Plan: 19 | 0UV9UHPEY1DLTB8 20 | 1/15 Thursday Today's Plan: 21 | SOXNXV21C7A7FH6 22 | V28ES99R6OPEI67 23 | TABERQWYW7HYBOA 24 | 3/10 Tuesday Today's Plan: 25 | 90L4XO2HQG2SQ5B 26 | 10/11 Monday Today is Free 27 | 12/9 Wednesday Today's Plan: 28 | KI7HP8OOTX7FJMB 29 | 8/21 Wednesday Today is Free 30 | 3/11 Friday Today's Plan: 31 | CTS2FPLLOWF053N 32 | LDYLGALZNW6SFN1 33 | GHKITQ7OH6HFKNI 34 | Friday is Busy :( 35 | 10/2 Subday Today's Plan: 36 | YK83W6IQF6Z3T5C 37 | 10/4 Tuesday Today's Plan: 38 | VISSXZQEW4V31AO 39 | 9/3 Thursday Today's Plan: 40 | TBRWLCB7FO49ICX 41 | 8/27 Thursday Today's Plan: 42 | IPP4NDFYFSGH9RZ 43 | RWC1ERGQVVUL2SB 44 | 7/18 Subday Today's Plan: 45 | KTS40OMHG4ELFG8 46 | 6/20 Thursday Today's Plan: 47 | XQFKZXDYEIWPNOJ 48 | MMRII4LMJVOKTVG 49 | 7/12 Friday Today is Free 50 | Friday is Free :) 51 | 7/10 Saturday Today is Free 52 | 2/1 Monday Today's Plan: 53 | NH8ON7EUPD8VCQS 54 | V8MTWMUFQXENLZ0 55 | 9/2 Saturday Today's Plan: 56 | K50TGBD20H5B5HH 57 | V1DF2AB8GOWD4J9 58 | 3/24 Monday Today's Plan: 59 | M4HLDVEBQ1PMMNL 60 | 1/25 Friday Today is Free 61 | Friday is Free :) 62 | 12/19 Friday Today is Free 63 | Friday is Free :) 64 | 2/14 Monday Today's Plan: 65 | BGDH8JYC6DGJROM 66 | 4UCVWIP2FIYZQRN 67 | 9/23 Saturday Today's Plan: 68 | 4JT95CS4R3NO5N2 69 | 11/25 Tuesday Today's Plan: 70 | XTNPBMWU51F5YZF 71 | 7/24 Monday Today's Plan: 72 | 8XB8ZPACJO3B2DQ 73 | DPH3UC0WOMYSWKT 74 | LDAR251FXU9M42L 75 | 8/2 Subday Today is Free 76 | 10/23 Monday Today's Plan: 77 | D5SZY8ZTHF9SV4B 78 | 2A80R47ZCVNH270 79 | 10/28 Saturday Today's Plan: 80 | BG3EZXV77QO8WX5 81 | ZVRMO48V07OIXNU 82 | 8/19 Tuesday Today is Free 83 | 5/7 Monday Today is Free 84 | 11/5 Monday Today's Plan: 85 | LXVZ2YW4TPSFQRP 86 | 3/17 Saturday Today is Free 87 | 11/6 Thursday Today's Plan: 88 | BVY0UY1I42FO4QT 89 | 6/1 Friday Today is Free 90 | Friday is Free :) 91 | 9/7 Monday Today's Plan: 92 | XE7RB9TLG9K9KQG 93 | 2/21 Friday Today's Plan: 94 | N3MU2TJUOAETFXW 95 | 47UGRRCWNDQ2NTB 96 | Friday is Busy :( 97 | 3/23 Monday Today is Free 98 | 3/18 Friday Today is Free 99 | Friday is Free :) 100 | 8/3 Thursday Today is Free 101 | 1/10 Monday Today is Free 102 | 1/8 Saturday Today's Plan: 103 | COKYCZMNHDPF3OX 104 | 4/10 Subday Today is Free 105 | 2/13 Subday Today is Free 106 | 5/21 Thursday Today's Plan: 107 | P2LG6WSSKT2G2MX 108 | DU6CUID8JCSBW3U 109 | 1/26 Wednesday Today's Plan: 110 | 5XYRBUHD06NQBLC 111 | 1HGVZKSUCF703ZT 112 | 0E8CNP4EYEVV197 113 | 6/12 Saturday Today is Free 114 | 6/27 Subday Today's Plan: 115 | RDQPLTILJET0SSR 116 | 6449VZ877BI5YVK 117 | 7/25 Saturday Today is Free 118 | 7/5 Tuesday Today is Free 119 | 12/20 Friday Today's Plan: 120 | SGVFJLHFFR8BEKP 121 | PH3D5LL7ADPK3QW 122 | OD3G2Q3C2HZWSLN 123 | Friday is Busy :( 124 | 6/11 Tuesday Today is Free 125 | 10/25 Monday Today is Free 126 | 12/17 Subday Today's Plan: 127 | FUJPATFH8VBVSXY 128 | 3B78YSXAZ7ZPMM5 129 | 4/7 Thursday Today's Plan: 130 | JHYN8LMP2BAYY64 131 | 4/14 Tuesday Today is Free 132 | 8/1 Tuesday Today's Plan: 133 | UVNDDKQ09VHG5CI 134 | T482V0BDLA40A82 135 | 1/28 Saturday Today's Plan: 136 | NFR1ID6RXEQDDUW 137 | MCO8M340JXDNSZ6 138 | JZQZEAUMBXK17DT 139 | 5/14 Saturday Today's Plan: 140 | BMBTBCNPRG3SXOH 141 | UN7AN0AWUUC0N4U 142 | 71TC998MXAV762M 143 | 7/8 Monday Today is Free 144 | 7/20 Saturday Today's Plan: 145 | O25TS441F6CRWGG 146 | ZEVA3IEBFRW8HNB 147 | 12/13 Friday Today's Plan: 148 | XJOOF16HX8U5OM0 149 | IUTWH6XI7MOJ58P 150 | KVKAA5WNL9WXG8E 151 | L3Q3IV08IHD5KML 152 | Friday is Busy :( 153 | 1/13 Friday Today's Plan: 154 | XYIOGU5PTREO3MZ 155 | Friday is Busy :( 156 | 1/6 Wednesday Today is Free 157 | 6/19 Saturday Today's Plan: 158 | 75V8P22E7D2N9ZC 159 | MQK5KC0DD6MV2SH 160 | 11/23 Monday Today is Free 161 | 11/3 Subday Today is Free 162 | 1/16 Thursday Today's Plan: 163 | UDVR11AA18YNGU1 164 | UP8RU8JKGEN4CJ5 165 | 11/22 Saturday Today's Plan: 166 | L8X5E19IE4VQIZC 167 | 3/16 Tuesday Today's Plan: 168 | SV1JK9CU2SR77B8 169 | 2/22 Subday Today is Free 170 | 4/27 Saturday Today's Plan: 171 | P1I30GLJV4E0UXT 172 | 4/11 Friday Today's Plan: 173 | EHWCMZR8FNFCWBY 174 | Friday is Busy :( 175 | 9/21 Friday Today's Plan: 176 | KR8PPEVULG90261 177 | Friday is Busy :( 178 | 3/20 Monday Today's Plan: 179 | 0H4EU7III19YIJ2 180 | 8/26 Subday Today is Free 181 | 9/10 Saturday Today's Plan: 182 | T8QAR5AAHVCQWL4 183 | 12/4 Tuesday Today's Plan: 184 | LY4VKNL3GUQGAGX 185 | 4/2 Friday Today's Plan: 186 | 78AGR85O61TKX45 187 | Friday is Busy :( 188 | 11/27 Thursday Today's Plan: 189 | Z53Z0J1GZ8DVPUD 190 | 5/23 Subday Today's Plan: 191 | JW51ZJ0R1T8G7RV 192 | 3/27 Saturday Today's Plan: 193 | S881P4RCR35TSJT 194 | PT8ZHLHSDHY23EP 195 | 8/20 Friday Today's Plan: 196 | 1YFPDL5TB8ZVD14 197 | Friday is Busy :( 198 | 6/15 Subday Today is Free 199 | 4/13 Monday Today is Free 200 | 12/25 Tuesday Today's Plan: 201 | 2O52RIU4LDBVP98 202 | 11/4 Subday Today is Free 203 | 12/12 Saturday Today's Plan: 204 | 35LGBH5J09Z6DJF 205 | VLS65JBNX05N7WR 206 | 3/4 Tuesday Today is Free 207 | 5/6 Tuesday Today's Plan: 208 | PYVUFH0KE4J0DVN 209 | 9/24 Subday Today's Plan: 210 | 1XLFXP5HE5T4817 211 | 88PASK0PLS1NLI6 212 | 824YIIOANEQBD0Q 213 | 7/26 Saturday Today's Plan: 214 | 7JY52H7Y1A2NUOR 215 | DOTDLTQW8C8HRGL 216 | 8QBVMZRYQ8O5XZ7 217 | -------------------------------------------------------------------------------- /data/24/1/data8.in: -------------------------------------------------------------------------------- 1 | 100 2 | 5 12 Thursday 3 | 10 7 Wednesday 4 | 9 13 Subday 5 | 11 18 Friday 6 | 11 19 Tuesday 7 | 8 18 Wednesday 8 | 10 5 Monday 9 | 12 2 Saturday 10 | 2 26 Friday 11 | 9 16 Subday 12 | 1 14 Saturday 13 | 3 28 Wednesday 14 | 9 8 Thursday 15 | 9 3 Tuesday 16 | 7 5 Wednesday 17 | 8 4 Monday 18 | 11 26 Friday 19 | 5 20 Wednesday 20 | 1 17 Wednesday 21 | 9 21 Tuesday 22 | 3 19 Friday 23 | 2 18 Friday 24 | 10 17 Tuesday 25 | 11 16 Subday 26 | 4 3 Subday 27 | 5 8 Friday 28 | 12 18 Monday 29 | 1 1 Tuesday 30 | 10 12 Thursday 31 | 5 27 Tuesday 32 | 4 28 Thursday 33 | 3 12 Wednesday 34 | 7 7 Friday 35 | 9 23 Subday 36 | 1 12 Friday 37 | 11 2 Tuesday 38 | 6 18 Tuesday 39 | 9 12 Thursday 40 | 11 12 Tuesday 41 | 9 24 Thursday 42 | 3 9 Subday 43 | 9 4 Saturday 44 | 6 6 Tuesday 45 | 6 25 Friday 46 | 9 19 Thursday 47 | 10 15 Tuesday 48 | 4 2 Wednesday 49 | 6 12 Saturday 50 | 4 26 Saturday 51 | 1 5 Saturday 52 | 10 2 Wednesday 53 | 7 27 Thursday 54 | 1 27 Thursday 55 | 9 15 Wednesday 56 | 11 1 Wednesday 57 | 1 7 Saturday 58 | 6 1 Monday 59 | 7 2 Monday 60 | 1 28 Friday 61 | 2 12 Thursday 62 | 7 4 Saturday 63 | 9 10 Friday 64 | 8 26 Saturday 65 | 1 15 Friday 66 | 2 25 Tuesday 67 | 7 28 Friday 68 | 10 21 Friday 69 | 5 6 Friday 70 | 1 26 Subday 71 | 1 4 Subday 72 | 11 9 Monday 73 | 2 24 Subday 74 | 12 13 Tuesday 75 | 7 25 Tuesday 76 | 12 7 Saturday 77 | 10 14 Tuesday 78 | 5 21 Saturday 79 | 11 15 Friday 80 | 6 7 Wednesday 81 | 3 23 Monday 82 | 12 14 Monday 83 | 1 16 Monday 84 | 7 26 Wednesday 85 | 2 22 Wednesday 86 | 9 14 Subday 87 | 11 21 Subday 88 | 5 24 Subday 89 | 8 5 Subday 90 | 3 13 Subday 91 | 5 7 Thursday 92 | 5 15 Tuesday 93 | 11 7 Friday 94 | 7 22 Saturday 95 | 9 20 Friday 96 | 8 27 Saturday 97 | 4 12 Tuesday 98 | 4 18 Friday 99 | 5 10 Monday 100 | 5 17 Wednesday 101 | 11 20 Wednesday 102 | 100 103 | 9 10 E94AMD23B9WW06X 104 | 10 2 A4EANSZ71U93DGA 105 | 4 12 SGVJN6CYWM3HIGB 106 | 9 23 P1FORADH44AWX9K 107 | 6 25 IKJK9LYGNXJ4XR3 108 | 5 21 0ID5KC11OQUGLV4 109 | 9 19 5RNYZ8ZX0IU3W6E 110 | 7 27 PQ1HBOUAJ4IN32W 111 | 11 26 SDIUDRSID1NKAJV 112 | 10 7 0MV13JWCVKBRSAR 113 | 1 12 NSJROWV9LSF94D6 114 | 5 12 KYKSJ5GCFF7PKHF 115 | 4 3 3G5CPM0736RBW9D 116 | 9 19 96GU89VZAO4CZS5 117 | 6 25 WU28BC6PQMEM94H 118 | 12 18 2PHHUS69N6C2R3I 119 | 11 18 U49VTJUZ4GRKBM7 120 | 11 20 5R1KN8QJMUHTIWX 121 | 11 9 4W9VAJAEHL6LSWS 122 | 8 4 URD583FISFV3894 123 | 5 27 W69KHLYUXC7FRD2 124 | 1 12 AFTFK7OJLI12G7W 125 | 5 24 F0CK4QQYIMQR86L 126 | 9 23 FDC5JQ81XRX21OY 127 | 6 18 O5ACHUCD32L8TNT 128 | 1 12 VT4CVRDRGDVQK2I 129 | 7 2 4WES8ZZO6B6ZDVP 130 | 2 24 1A1EOYOCP0QLO7F 131 | 9 14 3C7UEWIBREV853E 132 | 4 28 F0RMA4G6FO8J2IB 133 | 11 2 FMTA3ZG8V0TO7UO 134 | 2 22 JJOHQLTWYUKUL0G 135 | 7 2 KOPUM2UOEX6EBH3 136 | 1 15 QS8KCWB4WSIHWDT 137 | 6 1 BJTTGTPAC8UJWDB 138 | 11 1 5JN0ZK1R6GX1I1H 139 | 9 23 U0T44Z527B8L1TX 140 | 10 12 A8WNC837MZTBBTR 141 | 9 10 CZMJKFQZJEJPOL9 142 | 2 22 B53VBHNZCKS2NFL 143 | 9 10 NLICKDQR8C8J8JK 144 | 9 19 W51ZV030NH5PP49 145 | 10 12 6U4V5NXM2UAE67D 146 | 7 26 2TBM8KAUSTKN83P 147 | 9 23 YHCPPEEOLWVMLSV 148 | 2 26 Q03HNZSA99SP5UW 149 | 4 3 L9B2Z56O0BZ1TK5 150 | 9 16 3UDTOEMUB9ALZ7M 151 | 7 27 PVG16IJSPUDRO65 152 | 12 13 WJDWQGZCNSR48VP 153 | 1 7 OPVBUX9SILN35VD 154 | 4 26 60VNEBWN5L8YDO7 155 | 10 14 JQCTI6YAGHHTEGK 156 | 5 27 KXN37CR3PSNEHZU 157 | 3 9 VNPOQRHUKD3VSER 158 | 4 3 PJ0IUMFKERKVGYM 159 | 1 12 46YVCQL3JG1NXFN 160 | 3 12 CHXSYDY0C8HY21B 161 | 8 5 CSMYL5ADJ9DN814 162 | 9 12 44MMT1FGM27JN4Z 163 | 1 26 3LDCV64RIDZVZF8 164 | 9 8 6QT283Z48LXE88M 165 | 9 20 JSHAGO4N2ZRNU43 166 | 8 26 XQX8EF5YDGDE6UU 167 | 4 3 SG4L2WTG51JM93S 168 | 5 15 HR6UAFG6WNJP2Z0 169 | 8 5 QW78OYSI42FRLRX 170 | 9 16 LVZPSKOPKNQ8980 171 | 5 27 2QUCYIC6N0DD2HE 172 | 4 3 YEHRZRNPXKPFNL6 173 | 10 5 9IY0CZK3XK87OIO 174 | 7 27 M50DD4GXEJX2075 175 | 8 27 2XD1VVE79Q3LF1S 176 | 5 17 4LSF24CJ44KZHLZ 177 | 5 20 A9DNRMCQW4QBGE2 178 | 2 24 QQ2N42T1XE7RSA6 179 | 12 2 BOVFPPSZTYDG449 180 | 2 22 CRATL1JO7P95NM7 181 | 9 8 AQD26D8FY6FK6HO 182 | 12 2 IPF7ZU5SPCPEVPS 183 | 4 26 39ULKIRJLSJBSSS 184 | 2 18 7J16ZJ9G9030FX0 185 | 10 15 5XDP1VT0GJ58CIK 186 | 7 4 NW99F63IA0TPD3S 187 | 11 18 6LK82G3VL5TDCF2 188 | 3 23 WCQMU5JBYB1JH10 189 | 4 3 ATADVGATU6ZYJ42 190 | 1 5 8LW5Y2AM0Q7OYNE 191 | 6 1 4593K1OKKEN6SVL 192 | 12 18 IAMFJN628R4HXN5 193 | 11 20 B11Q9EAX5LJP60C 194 | 1 5 VLVR7U3DMS6G89F 195 | 9 12 LBEHCY2HN81YEN7 196 | 11 19 F2DRIEO819CN8WA 197 | 6 25 LBNZI6WFKXSVACG 198 | 1 7 243FHIC4R21RVSA 199 | 11 9 FQ2E1C1G3RN54VN 200 | 11 20 6M7GCDBQC77ZP70 201 | 3 23 4Y7PZBLGE83QYF4 202 | 8 26 692XL2OL6PDPIKM 203 | -------------------------------------------------------------------------------- /data/24/1/data9.in: -------------------------------------------------------------------------------- 1 | 100 2 | 3 11 Saturday 3 | 8 8 Wednesday 4 | 9 22 Friday 5 | 12 16 Friday 6 | 11 8 Wednesday 7 | 7 15 Tuesday 8 | 11 23 Wednesday 9 | 4 15 Monday 10 | 12 26 Thursday 11 | 7 22 Friday 12 | 2 16 Saturday 13 | 10 28 Monday 14 | 9 14 Monday 15 | 9 28 Tuesday 16 | 11 20 Subday 17 | 8 24 Monday 18 | 4 21 Wednesday 19 | 6 16 Thursday 20 | 11 9 Saturday 21 | 9 23 Friday 22 | 4 11 Subday 23 | 10 8 Subday 24 | 8 27 Tuesday 25 | 1 21 Subday 26 | 3 15 Subday 27 | 12 24 Wednesday 28 | 6 1 Wednesday 29 | 2 7 Monday 30 | 9 10 Saturday 31 | 4 2 Friday 32 | 9 15 Monday 33 | 3 9 Subday 34 | 12 10 Saturday 35 | 2 26 Friday 36 | 1 1 Friday 37 | 11 21 Thursday 38 | 11 26 Thursday 39 | 3 27 Tuesday 40 | 1 4 Monday 41 | 11 11 Tuesday 42 | 6 8 Wednesday 43 | 3 19 Thursday 44 | 6 7 Subday 45 | 8 6 Saturday 46 | 10 4 Saturday 47 | 2 12 Tuesday 48 | 7 6 Friday 49 | 1 8 Tuesday 50 | 12 15 Subday 51 | 7 20 Tuesday 52 | 10 23 Tuesday 53 | 10 26 Friday 54 | 6 19 Thursday 55 | 3 24 Thursday 56 | 7 24 Thursday 57 | 2 8 Monday 58 | 5 12 Wednesday 59 | 5 22 Subday 60 | 11 18 Tuesday 61 | 9 11 Friday 62 | 8 1 Subday 63 | 10 16 Monday 64 | 6 9 Subday 65 | 7 5 Saturday 66 | 7 3 Thursday 67 | 8 5 Saturday 68 | 3 14 Friday 69 | 4 1 Thursday 70 | 2 15 Subday 71 | 4 17 Thursday 72 | 4 20 Subday 73 | 8 3 Monday 74 | 5 15 Wednesday 75 | 6 22 Friday 76 | 6 21 Monday 77 | 1 20 Friday 78 | 6 18 Thursday 79 | 12 25 Saturday 80 | 5 24 Tuesday 81 | 10 10 Friday 82 | 7 18 Friday 83 | 2 28 Friday 84 | 9 24 Monday 85 | 9 20 Wednesday 86 | 1 24 Subday 87 | 8 16 Subday 88 | 1 2 Tuesday 89 | 7 28 Friday 90 | 12 8 Saturday 91 | 5 4 Monday 92 | 2 27 Subday 93 | 7 26 Saturday 94 | 6 20 Wednesday 95 | 11 6 Friday 96 | 10 11 Friday 97 | 10 24 Thursday 98 | 4 8 Wednesday 99 | 5 19 Wednesday 100 | 1 17 Saturday 101 | 3 20 Subday 102 | 100 103 | 5 22 VJE8MXFFIEX97HX 104 | 3 19 6PFVXNR0C7KOOSU 105 | 10 24 SVXWVUX03K5A9R1 106 | 10 28 FYHF33FMPH9SFVN 107 | 8 1 3NVGJAS560J2IUN 108 | 1 2 UMQMZHXSYMPLEZF 109 | 4 21 GCL9UWJ6FQ6TC4N 110 | 12 25 D4ZMHX60R1O7NDV 111 | 2 7 N270HA1SS649TTF 112 | 2 12 U337ZWIEKE8GE04 113 | 11 8 H2HFRE1OZVPNXXD 114 | 8 16 25K1ORHHXZ0FPSF 115 | 7 24 ZZUMAGKBRUBCBJG 116 | 9 24 5NA7IBMKS1LPCUK 117 | 2 7 ON6KZA15C8G05CS 118 | 6 21 O23TZISW704ZGON 119 | 7 26 PV6SP0JXFDT8ZHY 120 | 10 10 WE9T03MBFPC9PAQ 121 | 5 22 UQDAZDSC3H3KQKT 122 | 12 8 843818PQ4PZKVSE 123 | 11 21 B1MQJOKOP1VY8QW 124 | 8 8 0I8LPHRRDJAWDRD 125 | 6 7 LWN6M3574BI3UL3 126 | 12 10 L3D69ZP2QBPTK2D 127 | 6 18 4AH3E2Y3LQJ5896 128 | 6 20 ZXUQBQ6A9INOMIR 129 | 10 26 2ZZW5JNNRRO9UPW 130 | 7 26 DYGOK6OQVFXJ85R 131 | 4 8 F4O4FW81R0NLT4D 132 | 9 20 WRFNCLP3CB1LQ8Y 133 | 3 19 EW8ELVV903CXGUR 134 | 5 4 ZIVETI56Z8WXW1O 135 | 2 8 UQMJ03A09EKKZHF 136 | 3 11 3HOCXHDYYLZ9ZS3 137 | 9 14 FYKNZ69J4KSMWQT 138 | 10 10 HA9KID0ZL8BJ6Q0 139 | 5 12 ZTE1FAYIGH30H16 140 | 11 11 NO3YZ5P7820NA2O 141 | 6 9 FA4Q240NAYKI45L 142 | 3 14 N3ZEI4TUTGY7PEF 143 | 3 20 BV21PCDV4GWHYCM 144 | 4 15 CA02AXHC48DOFPP 145 | 9 15 EIWBSE94SF6IW9D 146 | 2 8 625RVCR1USTWQNN 147 | 3 27 7XQEDX763WE2JS9 148 | 11 23 MY11YMYY5Y2PAXP 149 | 5 22 PTMJN7HUECDCAH4 150 | 10 28 6A3FSI6HXAR1TJS 151 | 5 22 2DE97F46H8NDH38 152 | 4 2 GHZKJ52ET529Q5E 153 | 9 28 IMJGGRGZ7JBKHIB 154 | 10 10 6ILF60YBZKUI27A 155 | 4 2 MZJP6NJJ6CNUW7C 156 | 2 7 D8JVWIVE0BVRO5S 157 | 6 18 XYB5GSBFTWJDEEI 158 | 5 24 0UHNSU3SV9CIDZ7 159 | 10 10 DCPFJYB6O2H1NCG 160 | 1 17 3ICFDFBWN32USJI 161 | 9 24 QSB5PN12R3JA5PM 162 | 3 14 G0HK7KYEX79CFJL 163 | 1 20 CW0C6XT1DCXL6J8 164 | 9 24 JO3TTQ32XHEHM52 165 | 10 26 PD6XG61H3NF1NIC 166 | 1 4 FDI2E19J3L0AFJE 167 | 1 1 9R1J5PECW8T72CY 168 | 8 16 6KCRYR7SZZWMMG3 169 | 6 18 KD67IEM8VI85IUQ 170 | 3 19 XOJ29M42ZDDCZJB 171 | 3 27 E0UVRFJEHESKMA8 172 | 8 6 ERXNY77UUX31UEU 173 | 7 3 QNKKJL4PSG46674 174 | 10 10 RR7QNCFL8M7XBTF 175 | 6 18 28AXW0SEPN6CSH3 176 | 1 17 73XXW0JWJMQ0KHM 177 | 2 7 3HKQR41FNVHNSNY 178 | 6 18 9FA1LMXN8JJ1BD2 179 | 1 17 EPXY2VNKOKBOAB1 180 | 2 26 0EQW4NTXYK5S6RJ 181 | 9 28 NF2JSZ67ILRNNSU 182 | 3 15 LYY2D1FMGAC83QR 183 | 3 9 BQWG34AR4VI6AIB 184 | 11 6 US2O6S5O14FB6GF 185 | 12 24 N7W198JSPYU241Q 186 | 11 11 CEC7M91O8O4UD59 187 | 6 7 C5RA7E8F0UHH1PS 188 | 6 9 F6L82DGK76KI3G4 189 | 10 24 6VUXBU4QN9VPMVH 190 | 9 14 E52LQ9X3PHBF1IW 191 | 11 20 PACGUUCGJ5XQXYH 192 | 11 8 GOFEWKB3A4U7SVZ 193 | 6 21 PPJJ5VDQ4NDBRR2 194 | 11 23 NWPODJF2CR04JAQ 195 | 6 22 N0JKL1FX903U26Z 196 | 11 8 3YHVWWMX2R87JUZ 197 | 3 20 QG9M9N1GHS85M1H 198 | 8 5 KXX5NOVUJIN4EM8 199 | 3 14 AFZ97I6S4YXQCC2 200 | 2 8 V5ITYGMGZILNG7I 201 | 7 20 ZEFKX9PXYMVNCCX 202 | 8 27 CBD4HJIT3K164NH 203 | -------------------------------------------------------------------------------- /data/24/1/datagen.py: -------------------------------------------------------------------------------- 1 | 2 | import numpy as np 3 | import random 4 | import string 5 | ds = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Subday"] 6 | rm = [] 7 | 8 | def check(m1, d1): 9 | for r in rm: 10 | if r[0] == m1 and r[1] == d1: 11 | return False 12 | return True 13 | for d in range(1, 11): 14 | print(d) 15 | rm = [] 16 | f = open("data"+str(d)+".in", "w") 17 | f.write("100\n") 18 | for i in range(1, 101): 19 | m1, d1 = np.random.randint(1, 13), np.random.randint(1, 29) 20 | while not check(m1, d1): 21 | m1, d1 = np.random.randint(1, 13), np.random.randint(1, 29) 22 | rm.append((m1, d1)) 23 | f.write(str(m1) + " " + str(d1) + " " + random.choice(ds) + "\n") 24 | f.write("100\n") 25 | for i in range(1, 101): 26 | r = random.choice(rm) 27 | s = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(15)) 28 | f.write(str(r[0]) + " " + str(r[1]) + " " + s + "\n") 29 | 30 | -------------------------------------------------------------------------------- /data/24/1/download/example_in.txt: -------------------------------------------------------------------------------- 1 | 3 2 | 1 1 Thursday 3 | 1 2 Friday 4 | 1 3 Saturday 5 | 3 6 | 1 1 Work 7 | 1 2 Study 8 | 1 1 Swim 9 | -------------------------------------------------------------------------------- /data/24/1/download/example_out.txt: -------------------------------------------------------------------------------- 1 | 1/1 Thursday Today's Plan: 2 | Work 3 | Swim 4 | 1/2 Friday Today's Plan: 5 | Study 6 | Friday is Busy :( 7 | 1/3 Saturday Today is Free 8 | -------------------------------------------------------------------------------- /data/24/1/download/main.cpp: -------------------------------------------------------------------------------- 1 | #include "friday.h" 2 | #include "day.h" 3 | #include "plan.h" 4 | #include 5 | #include 6 | 7 | Day* days[101]; 8 | int main() 9 | { 10 | int m, k, a, b; 11 | std::string c; 12 | std::cin >> m; 13 | for(int i = 0; i < m; ++i) 14 | { 15 | std::cin >> a >> b >> c; 16 | if(c == "Friday") 17 | days[i] = new Friday(a, b, c); 18 | else 19 | days[i] = new Day(a, b, c); 20 | } 21 | std::cin >> k; 22 | while(k--) 23 | { 24 | std::cin >> a >> b >> c; 25 | Plan t(a, b, c); 26 | for(int i = 0; i < m; ++i) 27 | if(days[i]->insert(t)) 28 | break; 29 | } 30 | for(int i = 0; i < m; ++i) 31 | days[i]->print(); 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /data/24/1/judger: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | #coding=utf-8 3 | 4 | import sys 5 | import os 6 | 7 | import judger_class_lib as lib 8 | from uoj_judger_compiler import * 9 | from uoj_judger_tester import * 10 | from uoj_judger_reporter import * 11 | from uoj_judger_config import * 12 | 13 | if __name__=="__main__": 14 | main_path = sys.argv[1] 15 | work_path = sys.argv[2] 16 | result_path = sys.argv[3] 17 | data_path = sys.argv[4] 18 | 19 | C = pyjudgerConfig(main_path, work_path, result_path, data_path) 20 | n = int(C.config["n_tests"]) 21 | R = pyjudgerReporter(C, n) 22 | Co = pyjudgerCompiler(C) 23 | T = pyjudger_custom_tester(C)#), executer=MyExecuter()) 24 | 25 | R.report_judgement_status("Compiling") 26 | ret = Co.compile_command("/usr/bin/make") 27 | if not ret.succeeded: 28 | R.end_judge_compile_error(info=lib.file_preview(result_path + "/compiler_result.txt")) 29 | res, info = lib.check_file_exist(work_path, result_path, ["main"]) 30 | if not res: 31 | R.end_judge_custom_error("Make Failed", info) 32 | 33 | for i in range(n): 34 | t = i + 1 35 | R.report_judgement_status("Judging #%d" % t) 36 | ret = T.test(t) 37 | R.add_point_info(ret) 38 | 39 | R.end_judge_ok() 40 | -------------------------------------------------------------------------------- /data/24/1/problem.conf: -------------------------------------------------------------------------------- 1 | n_tests 10 2 | execute_name main 3 | time_limit 1 4 | memory_limit 256 5 | output_limit 64 6 | use_builtin_checker lcmp 7 | use_python_judger on 8 | input_pre data 9 | input_suf in 10 | output_pre data 11 | output_suf out -------------------------------------------------------------------------------- /data/24/1/require/main.cpp: -------------------------------------------------------------------------------- 1 | #include "friday.h" 2 | #include "day.h" 3 | #include "plan.h" 4 | #include 5 | #include 6 | 7 | Day* days[101]; 8 | int main() 9 | { 10 | int m, k, a, b; 11 | std::string c; 12 | std::cin >> m; 13 | for(int i = 0; i < m; ++i) 14 | { 15 | std::cin >> a >> b >> c; 16 | if(c == "Friday") 17 | days[i] = new Friday(a, b, c); 18 | else 19 | days[i] = new Day(a, b, c); 20 | } 21 | std::cin >> k; 22 | while(k--) 23 | { 24 | std::cin >> a >> b >> c; 25 | Plan t(a, b, c); 26 | for(int i = 0; i < m; ++i) 27 | if(days[i]->insert(t)) 28 | break; 29 | } 30 | for(int i = 0; i < m; ++i) 31 | days[i]->print(); 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /data/24/1/text.md: -------------------------------------------------------------------------------- 1 | ### 题目描述 2 | 3 | 小明总会为他接下来的一段日子做一些计划和安排。在大多数日子中,小明总是积极向上。但由于“黑色星期五”的传说,小明认为星期五是一个特别的日子,因此不希望在周五有任何计划。 4 | 5 | 现在,小明希望你帮他实现一个计划管理器来进行合理规划,并对周五进行特别的提醒。 6 | 7 | 文件下载地址:[下载链接](/download.php?type=problem&id=24) 8 | 9 | ### 输入样例 10 | 11 | 第一行包括一个正整数 $m$,表示需要规划的总天数。 12 | 13 | 接下来m行,每行包括两个数字 $a$,$b$ 以及字符串 $c$,表示本日为 $a$月 $b$日,$c$表示星期几(如Monday)。 14 | 15 | 接下来一行包括一个正整数 $k$ 表示共有多少个计划。 16 | 17 | 接下来 $k$ 行,每行包括两个数字 $a$,$b$,以及字符串 $s$,表示 $a$月 $b$日有一个内容为 $s$的计划。保证日期在之前“需要规划的日期”中出现过。 18 | 19 | 样例输入见 `example_in.txt` 20 | 21 | ``` 22 | 3 23 | 1 1 Thursday 24 | 1 2 Friday 25 | 1 3 Saturday 26 | 3 27 | 1 1 Work 28 | 1 2 Study 29 | 1 1 Swim 30 | ``` 31 | 32 | ### 输出样例 33 | 34 | 按照输入顺序,依次输出每天的计划安排。对每天,首先输出"$a$/$b$ $c$"表示是$a$月$b$日,星期$c$。如果当天有计划,则输出"Today's Plan:", 之后若干行,按输入顺序每行输出一个计划的内容。如果当天无计划,则输出"Today is Free"。 35 | 36 | 特别的,如果是周五,则额外输出一行:"Friday is Busy :("或"Friday is Free :)"。 37 | 38 | 完整输出见 `example_out.txt` 39 | 40 | ``` 41 | 1/1 Thursday Today's Plan: 42 | Work 43 | Swim 44 | 1/2 Friday Today's Plan: 45 | Study 46 | Friday is Busy :( 47 | 1/3 Saturday Today is Free 48 | ``` 49 | 50 | ### 要求 51 | 52 | 1. 不修改 `main.cpp`。 53 | 2. 在已有代码基础上编写 Plan 类,Day 类,Friday 类及Makefile。请合理设计三个类的组合与继承关系,人工评价会依照设计合理性与可拓展性给分。 54 | 55 | ### 限制与约定 56 | 57 | $2 \leq m,k \leq 100$ 58 | 59 | **时间限制:1s** 60 | 61 | **空间限制:256MB** 62 | 63 | ### 提交格式 64 | 65 | 根据提供的 `main.cpp` 的内容,编写对应的类的代码( Plan 类,Day 类,Friday 类)。你应该将你的文件打包成一个zip压缩包并上传。评测时,OJ会将提供的 `main.cpp`贴入你的目录下进行编译并执行。 66 | 67 | ### 评分标准 68 | 69 | OJ评分占70%,人工评分占30%。 -------------------------------------------------------------------------------- /data/24/1/uoj_judger_compiler.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import judger_class_lib as lib 3 | 4 | class pyjudgerCompiler(object): 5 | def __init__(self, config): 6 | self.config = config 7 | 8 | def run_compiler(self, path, arg): 9 | argv = ["--type=compiler", "--work-path=" + path] 10 | argv.extend(arg) 11 | 12 | ret = lib.run_program( \ 13 | main_path=self.config.main_path, \ 14 | work_path=self.config.work_path, \ 15 | result_file_name=self.config.result_path + "/run_compiler_result.txt", \ 16 | input_file_name="/dev/null", \ 17 | output_file_name="stderr", \ 18 | error_file_name=self.config.result_path + "/compiler_result.txt", \ 19 | limit=lib.RL_COMPILER_DEFAULT, \ 20 | para_list=argv, \ 21 | uoj_offline=("uoj_offline" in self.config.config)) 22 | res = lib.RunCompilerResult(type=ret.type, ust=ret.ust, usm=ret.usm, \ 23 | succeeded=(ret.type == lib.RS_AC) and (ret.exit_code == 0)) 24 | if not res.succeeded: 25 | if res.type == lib.RS_AC: 26 | res.info = lib.file_preview(self.config.result_path + "/compiler_result.txt", 500) 27 | elif res.type == lib.RS_JGF: 28 | res.info = "No Comment" 29 | else: 30 | res.info = "Compiler " + lib.info_str(res.type) 31 | return res 32 | 33 | def compile_cpp(self, name, path=None): 34 | path = path or self.config.work_path 35 | argv = ["/usr/bin/g++", "-o", name, "-x", "c++", "answer.code", "-std=c++11", "-lm", "-O2", "-DONLINE_JUDGE"] 36 | return self.run_compiler(path, argv) 37 | 38 | def compile_command(self, para, path=None): 39 | path = path or self.config.work_path 40 | argv = para.split(' ') 41 | return self.run_compiler(path, argv) 42 | 43 | def compile(self, para): 44 | name = para 45 | if name + '_language' in self.config.config: 46 | lang = self.config.config[name + '_language'] 47 | print("has a language :", lang) 48 | #TODO check language type 49 | return self.compile_cpp(name) 50 | else: 51 | return self.compile_cpp(name) 52 | 53 | # if __name__ == "__main__": 54 | # def test(): 55 | # C = pyjudgerConfig() 56 | # os.chdir(C.work_path) 57 | # my_compiler = pyjudgerCompiler(C) 58 | # #以下是两种编译方法 59 | # #1. 默认编译 60 | # my_compiler.compile("main") 61 | # #2. 使用 g++ 或者 g++-4.8 或者直接用 /usr/bin/g++-4.8 62 | # #my_compiler.custom_compile("g++ -o main -x c++ main.code -lm -O2 -DONLINE_JUDGE") 63 | # test() 64 | -------------------------------------------------------------------------------- /data/24/1/uoj_judger_config.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import os 3 | class pyjudgerConfig: 4 | def __init__(self, main_path, work_path, result_path, data_path): 5 | self.config = dict() 6 | 7 | def load_config(config_file): 8 | configs = open(config_file, 'r').readlines() 9 | for each_config in configs: 10 | key, value = each_config.strip('\n').strip('\r').split(' ') 11 | self.config[key] = value 12 | 13 | self.main_path = main_path 14 | self.work_path = work_path 15 | self.result_path = result_path 16 | load_config(self.work_path + "/submission.conf") 17 | self.problem_id = self.config['problem_id'] 18 | self.data_path = data_path 19 | load_config(self.data_path + "/problem.conf") 20 | self.exec_file_name = "./main" 21 | 22 | #exec("cp %s/require/* %s 2>/dev/null"%(self.__data_path, self.__work_path)) 23 | 24 | #这里可以修改 25 | if "use_builtin_checker" in self.config: 26 | self.config["checker"] = self.main_path + "/builtin/checker/" + self.config["use_builtin_checker"] 27 | else: 28 | self.config["checker"] = self.data_path + "/chk" 29 | self.config["validator"] = self.data_path + "/val" 30 | 31 | #os.chdir(self.work_path) 32 | -------------------------------------------------------------------------------- /data/24/1/uoj_judger_reporter.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | from uoj_judger_config import * 3 | import judger_class_lib as lib 4 | import fcntl 5 | 6 | class pyjudgerReporter: 7 | def __init__(self, config, test_num): 8 | self.config = config 9 | self.tot_time = 0 10 | self.max_memory = 0 11 | self.details_out = "" 12 | self.tot_score = 0 13 | self.test_num = test_num 14 | 15 | def report_judgement_status(self, info): 16 | print(self.config.result_path+"/cur_status.txt") 17 | F = open(self.config.result_path+"/cur_status.txt", "w") 18 | fcntl.flock(F.fileno(), fcntl.LOCK_EX) 19 | F.write(info[:512]) 20 | 21 | def add_point_info(self, info): 22 | if info.ust >= 0: 23 | self.tot_time += info.ust 24 | if info.usm >= self.max_memory: 25 | self.max_memory = info.usm 26 | self.details_out += ""\ 27 | % (info.num, info.scr / self.test_num, info.info, info.ust, info.usm) 28 | self.tot_score += info.scr / self.test_num 29 | if info.input: 30 | self.details_out += "%s" % (lib.htmlspecialchars(info.input)) 31 | if info.output: 32 | self.details_out += "%s" % (lib.htmlspecialchars(info.output)) 33 | if info.res: 34 | self.details_out += "%s" % (lib.htmlspecialchars(info.res)) 35 | if info.extrainfo: 36 | self.details_out += info.extrainfo 37 | self.details_out += "\n" 38 | 39 | def add_subtask_info(self, subTaskIndex, scr=0, info="", points=None): 40 | self.details_out += "\n") 58 | F.write(self.details_out) 59 | F.write("\n") 60 | F.close() 61 | exit(0) 62 | 63 | def end_judge_judgement_failed(self, info=""): 64 | F = open(self.config.result_path+"/result.txt", "w") 65 | F.write("error Judgment Failed\n") 66 | F.write("details\n") 67 | F.write("%s\n" % lib.htmlspecialchars(info)) 68 | F.close() 69 | exit(0) 70 | 71 | def end_judge_compile_error(self, info=""): 72 | F = open(self.config.result_path+"/result.txt", "w") 73 | F.write("error Compile Error\n") 74 | F.write("details\n") 75 | F.write("%s\n" % lib.htmlspecialchars(info)) 76 | F.close() 77 | exit(0) 78 | 79 | def end_judge_custom_error(self, label, info=""): 80 | F = open(self.config.result_path+"/result.txt", "w") 81 | F.write("error %s\n" % label) 82 | F.write("details\n") 83 | F.write("%s\n" % lib.htmlspecialchars(info)) 84 | F.close() 85 | exit(0) 86 | -------------------------------------------------------------------------------- /data/37/1/Makefile: -------------------------------------------------------------------------------- 1 | export INCLUDE_PATH 2 | CXXFLAGS = -I$(INCLUDE_PATH) -O2 -std=c++11 3 | 4 | all: 5 | chmod +x judger -------------------------------------------------------------------------------- /data/37/1/description.md: -------------------------------------------------------------------------------- 1 | ### 题目描述 2 | 3 | 小明最近学了python的list(也就是python中的数组),感觉非常好用,于是也想在C++里实现一个类似功能的类。 4 | 5 | 小明将这个类命名为MyList,具体来说,需要满足以下的功能: 6 | 7 | * 通过append可以向MyList的最后添加元素。 8 | * x[i]可以访问MyList的第i个元素。 9 | * 可以用cout输出MyList中的所有元素。 10 | 11 | ``` 12 | //subtask 1 13 | MyList x; 14 | std::cout << x << std::endl; //[] 15 | for(int i = 0; i < 5; i++) 16 | x.append(i); 17 | std::cout << x[0] << std::endl; // 0 18 | std::cout << x << std::endl; //[0,1,2,3,4] 19 | ``` 20 | 21 | Python中的对象有一个特性,即所有的对象均为引用。下列代码中,对于y的修改,也会导致x的修改。 22 | 23 | 24 | ``` 25 | //subtask 2 26 | MyList y = x; 27 | y[0] += 5; 28 | std::cout << x << std::endl; //[5,1,2,3,4] 29 | ``` 30 | 31 | 接下来,小明还想实现slice功能。拿出MyList的任意一段,也可以当做一个新的MyList,较小的那一段被称为原MyList的一个slice。并且对slice的修改也会影响原始的MyList。 32 | 33 | ``` 34 | //subtask 3 35 | MyList z = x(1, 3); //左闭右开选出位置在[1,3)的元素。保证slice左端点不大于右端点。 36 | std::cout << z << std::endl; //[1,2] 37 | z[1] += 5; 38 | std::cout << z << std::endl; //[1,7] 39 | std::cout << x << std::endl; //[5,1,7,3,4] 40 | ``` 41 | 42 | Slice还有一个神奇的特点。如果向slice中append,不仅slice的最后会多出一个新增的元素,原始的List也会在相应位置加入该元素。 43 | 44 | ``` 45 | //subtask 4 46 | MyList r = x(2, 4); 47 | std::cout << r << std::endl; // [7,3] 48 | r.append(-1); 49 | std::cout << r << std::endl; // [7,3,-1] 50 | std::cout << x << std::endl; // [5,1,7,3,-1,4] 51 | ``` 52 | 53 | 为了简便,该题的list只存储int,并且可以默认在使用中不出现非法的访问操作。 54 | 55 | 小明已经完成了部分代码,但是调试一直没法通过。你需要帮助他改好相应的功能,并通过测试程序。`main.cpp`为测试程序,`MyList.h`是小明实现的部分代码。 56 | 文件下载地址:[下载链接](/download.php?type=problem&id=35) 57 | 58 | ### 对小明代码的解释 59 | 60 | 你可以采用小明的代码,**也可以完全不使用小明的代码**,他的代码只作为本题的提示。你只用提交`MyList.h`,通过测试即可。 61 | 62 | 需要注意的是,**小明的已完成的代码里包含一些错误**,你需要进行修改。 63 | 64 | 这里对小明的设计做一些解释。 65 | 66 | 观察四个subtask可以发现,所有的操作实际上都是对同一个数组进行了操作。因此小明决定将MyList封装成为一个类似迭代器的类。迭代器拥有储存类的指针和当前的位置。而MyList类同样也有储存类的指针,但记录了起始位置和结束位置。小明将真正的内容储存在std::list中。每个MyList包含一个指针pt指向真正的std::list,left和right代表MyList在std::list的起始终止位置。它们的关系可以参考下图。 67 | 68 | 69 | 70 | 其中x, y, z的pt均指向同一std::list。x, y的left指向开头,right指向结尾,所以他们都代表整个序列。z的left指向1,right指向3,所以其内容应该是[1,2] (不包含3,左闭右开区间)。 71 | 72 | 为了保证内存不泄露,pt使用了stl的动态指针std::shared_ptr。left,right记录std::list的位置信息,使用的是std::list::iterator。(使用std::list的原因是避免迭代器的失效问题。) 73 | 74 | 提示:涉及stl的问题往往会带来很多编译错误,从第一条error看起会比较容易。 75 | 76 | ### 提交格式 77 | 78 | 你只能提交头文件`MyList.h` 79 | 80 | 我们会将你提交的文件和我们预先设置好的`main.cpp`一起编译运行。 81 | 82 | ### 评分标准 83 | 84 | 我们会有1个样例测试点,即下发的main.cpp。另外有1个隐藏测试点,会相应的更改main.cpp中内容进行测试。一般来说,如果你能正确实现通过样例测试点,也应该能够通过隐藏测试点。 85 | 86 | 本题按照以上描述分为了4个subtask,每个subtask各占25分。只有你通过了样例测试点和隐藏测试点的同一个subtask,你才能获得该subtask的分数。 87 | 88 | **注意你不用同时通过4个subtask再提交**,我们会将每一个subtask的代码拆开,分别编译。(但是后一个subtask会依赖于前一个subtask。) 89 | 90 | 考试100%为OJ评分。 91 | -------------------------------------------------------------------------------- /data/37/1/download/download.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/data/37/1/download/download.zip -------------------------------------------------------------------------------- /data/37/1/download/figure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/data/37/1/download/figure.png -------------------------------------------------------------------------------- /data/37/1/input1.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/data/37/1/input1.txt -------------------------------------------------------------------------------- /data/37/1/input2.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/data/37/1/input2.txt -------------------------------------------------------------------------------- /data/37/1/input3.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/data/37/1/input3.txt -------------------------------------------------------------------------------- /data/37/1/input4.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/data/37/1/input4.txt -------------------------------------------------------------------------------- /data/37/1/input5.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/data/37/1/input5.txt -------------------------------------------------------------------------------- /data/37/1/input6.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/data/37/1/input6.txt -------------------------------------------------------------------------------- /data/37/1/input7.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/data/37/1/input7.txt -------------------------------------------------------------------------------- /data/37/1/input8.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JianGuanTHU/UOJ_Offline/2083c951b4ba962cdc1c33eb855fc1bccaf09dc2/data/37/1/input8.txt -------------------------------------------------------------------------------- /data/37/1/output1.txt: -------------------------------------------------------------------------------- 1 | [] 2 | 0 3 | [0,1,2,3,4] 4 | -------------------------------------------------------------------------------- /data/37/1/output2.txt: -------------------------------------------------------------------------------- 1 | [] 2 | 0 3 | [0,1,2,3,4] 4 | [5,1,2,3,4] 5 | -------------------------------------------------------------------------------- /data/37/1/output3.txt: -------------------------------------------------------------------------------- 1 | [] 2 | 0 3 | [0,1,2,3,4] 4 | [5,1,2,3,4] 5 | [1,2] 6 | [1,7] 7 | [5,1,7,3,4] 8 | -------------------------------------------------------------------------------- /data/37/1/output4.txt: -------------------------------------------------------------------------------- 1 | [] 2 | 0 3 | [0,1,2,3,4] 4 | [5,1,2,3,4] 5 | [1,2] 6 | [1,7] 7 | [5,1,7,3,4] 8 | [7,3] 9 | [7,3,-1] 10 | [5,1,7,3,-1,4] 11 | -------------------------------------------------------------------------------- /data/37/1/output5.txt: -------------------------------------------------------------------------------- 1 | [] 2 | 0 3 | 1 4 | 2 5 | 3 6 | 4 7 | 5 8 | 6 9 | 7 10 | 8 11 | 9 12 | 10 13 | 11 14 | 12 15 | 13 16 | 14 17 | 15 18 | 16 19 | 17 20 | 18 21 | 19 22 | 20 23 | 21 24 | 22 25 | 23 26 | 24 27 | 25 28 | 26 29 | 27 30 | 28 31 | 29 32 | 30 33 | 31 34 | 32 35 | 33 36 | 34 37 | 35 38 | 36 39 | 37 40 | 38 41 | 39 42 | 40 43 | 41 44 | 42 45 | 43 46 | 44 47 | 45 48 | 46 49 | 47 50 | 48 51 | 49 52 | 50 53 | 51 54 | 52 55 | 53 56 | 54 57 | 55 58 | 56 59 | 57 60 | 58 61 | 59 62 | 60 63 | 61 64 | 62 65 | 63 66 | 64 67 | 65 68 | 66 69 | 67 70 | 68 71 | 69 72 | 70 73 | 71 74 | 72 75 | 73 76 | 74 77 | 75 78 | 76 79 | 77 80 | 78 81 | 79 82 | 80 83 | 81 84 | 82 85 | 83 86 | 84 87 | 85 88 | 86 89 | 87 90 | 88 91 | 89 92 | 90 93 | 91 94 | 92 95 | 93 96 | 94 97 | 95 98 | 96 99 | 97 100 | 98 101 | 99 102 | [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99] 103 | -------------------------------------------------------------------------------- /data/37/1/output6.txt: -------------------------------------------------------------------------------- 1 | [] 2 | 0 3 | 1 4 | 2 5 | 3 6 | 4 7 | 5 8 | 6 9 | 7 10 | 8 11 | 9 12 | 10 13 | 11 14 | 12 15 | 13 16 | 14 17 | 15 18 | 16 19 | 17 20 | 18 21 | 19 22 | 20 23 | 21 24 | 22 25 | 23 26 | 24 27 | 25 28 | 26 29 | 27 30 | 28 31 | 29 32 | 30 33 | 31 34 | 32 35 | 33 36 | 34 37 | 35 38 | 36 39 | 37 40 | 38 41 | 39 42 | 40 43 | 41 44 | 42 45 | 43 46 | 44 47 | 45 48 | 46 49 | 47 50 | 48 51 | 49 52 | 50 53 | 51 54 | 52 55 | 53 56 | 54 57 | 55 58 | 56 59 | 57 60 | 58 61 | 59 62 | 60 63 | 61 64 | 62 65 | 63 66 | 64 67 | 65 68 | 66 69 | 67 70 | 68 71 | 69 72 | 70 73 | 71 74 | 72 75 | 73 76 | 74 77 | 75 78 | 76 79 | 77 80 | 78 81 | 79 82 | 80 83 | 81 84 | 82 85 | 83 86 | 84 87 | 85 88 | 86 89 | 87 90 | 88 91 | 89 92 | 90 93 | 91 94 | 92 95 | 93 96 | 94 97 | 95 98 | 96 99 | 97 100 | 98 101 | 99 102 | [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99] 103 | [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99] 104 | [0,101,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99] 105 | [0,101,202,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99] 106 | [0,101,202,303,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99] 107 | [0,101,202,303,404,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99] 108 | [0,101,202,303,404,505,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99] 109 | [0,101,202,303,404,505,606,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99] 110 | [0,101,202,303,404,505,606,707,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99] 111 | [0,101,202,303,404,505,606,707,808,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99] 112 | [0,101,202,303,404,505,606,707,808,909,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99] 113 | -------------------------------------------------------------------------------- /data/37/1/problem.conf: -------------------------------------------------------------------------------- 1 | time_limit 5 2 | memory_limit 512 3 | output_limit 64 4 | use_builtin_checker lcmp 5 | use_python3_judger on -------------------------------------------------------------------------------- /data/37/1/require/Makefile1: -------------------------------------------------------------------------------- 1 | all: main1 main5 2 | 3 | main1: main.cpp MyList.h 4 | g++ main.cpp -o main1 -std=c++11 -DSUBTASK1 5 | 6 | main5: main.cpp MyList.h 7 | g++ main2.cpp -o main5 -std=c++11 -DSUBTASK1 8 | -------------------------------------------------------------------------------- /data/37/1/require/Makefile2: -------------------------------------------------------------------------------- 1 | all: main2 main6 2 | 3 | main2: main.cpp MyList.h 4 | g++ main.cpp -o main2 -std=c++11 -DSUBTASK1 -DSUBTASK2 5 | 6 | main6: main.cpp MyList.h 7 | g++ main2.cpp -o main6 -std=c++11 -DSUBTASK1 -DSUBTASK2 8 | 9 | main7: main.cpp MyList.h 10 | g++ main2.cpp -o main7 -std=c++11 -DSUBTASK1 -DSUBTASK2 -DSUBTASK3 11 | 12 | main8: main.cpp MyList.h 13 | g++ main2.cpp -o main8 -std=c++11 -DSUBTASK1 -DSUBTASK2 -DSUBTASK3 -DSUBTASK4 14 | 15 | -------------------------------------------------------------------------------- /data/37/1/require/Makefile3: -------------------------------------------------------------------------------- 1 | all: main3 main7 2 | 3 | main3: main.cpp MyList.h 4 | g++ main.cpp -o main3 -std=c++11 -DSUBTASK1 -DSUBTASK2 -DSUBTASK3 5 | 6 | main7: main.cpp MyList.h 7 | g++ main2.cpp -o main7 -std=c++11 -DSUBTASK1 -DSUBTASK2 -DSUBTASK3 8 | 9 | -------------------------------------------------------------------------------- /data/37/1/require/Makefile4: -------------------------------------------------------------------------------- 1 | all: main4 main8 2 | 3 | main4: main.cpp MyList.h 4 | g++ main.cpp -o main4 -std=c++11 -DSUBTASK1 -DSUBTASK2 -DSUBTASK3 -DSUBTASK4 5 | 6 | main8: main.cpp MyList.h 7 | g++ main2.cpp -o main8 -std=c++11 -DSUBTASK1 -DSUBTASK2 -DSUBTASK3 -DSUBTASK4 8 | 9 | -------------------------------------------------------------------------------- /data/37/1/require/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "MyList.h" 4 | 5 | int main() 6 | { 7 | 8 | MyList x; 9 | 10 | #ifdef SUBTASK1 11 | //subtask 1 12 | std::cout << x << std::endl; 13 | for(int i = 0; i < 5; i++) 14 | x.append(i); 15 | std::cout << x[0] << std::endl; 16 | std::cout << x << std::endl; 17 | #endif 18 | 19 | #ifdef SUBTASK2 20 | //subtask 2 21 | MyList y = x; 22 | y[0] += 5; 23 | std::cout << x << std::endl; 24 | #endif 25 | 26 | #ifdef SUBTASK3 27 | //subtask 3 28 | MyList z = x(1, 3); 29 | std::cout << z << std::endl; 30 | z[1] += 5; 31 | std::cout << z << std::endl; 32 | std::cout << x << std::endl; 33 | #endif 34 | 35 | #ifdef SUBTASK4 36 | //subtask 4 37 | MyList r = x(2, 4); 38 | std::cout << r << std::endl; 39 | r.append(-1); 40 | std::cout << r << std::endl; 41 | std::cout << x << std::endl; 42 | #endif 43 | 44 | return 0; 45 | } 46 | -------------------------------------------------------------------------------- /data/37/1/require/main2.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "MyList.h" 4 | 5 | int main() 6 | { 7 | 8 | MyList x; 9 | 10 | #ifdef SUBTASK1 11 | //subtask 1 12 | std::cout << x << std::endl; 13 | for(int i = 0; i < 100; i++) 14 | x.append(i); 15 | for(int i = 0; i < 100; i++) 16 | std::cout << x[i] << std::endl; 17 | std::cout << x << std::endl; 18 | #endif 19 | 20 | #ifdef SUBTASK2 21 | //subtask 2 22 | MyList y = x; 23 | for(int i = 0; i < 10; i++){ 24 | y[i] += i * 100; 25 | std::cout << x << std::endl; 26 | } 27 | #endif 28 | 29 | #ifdef SUBTASK3 30 | //subtask 3 31 | for(int i = 1; i < 10; i++){ 32 | MyList z = x(i * 10, i * 11 + 1); 33 | std::cout << z << std::endl; 34 | for(int j = 0; j <= i; j++){ 35 | z[i] += j; 36 | } 37 | std::cout << x << std::endl; 38 | } 39 | #endif 40 | 41 | #ifdef SUBTASK4 42 | //subtask 4 43 | for(int i = 1; i < 10; i++){ 44 | MyList r = x(i * 10, i * 11 + 1); 45 | std::cout << r << std::endl; 46 | r.append(i); 47 | std::cout << x << std::endl; 48 | } 49 | #endif 50 | 51 | return 0; 52 | } 53 | -------------------------------------------------------------------------------- /data/37/1/uoj_judger_compiler.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import judger_class_lib as lib 3 | 4 | class pyjudgerCompiler(object): 5 | def __init__(self, config): 6 | self.config = config 7 | 8 | def run_compiler(self, path, arg): 9 | argv = ["--type=compiler", "--work-path=" + path] 10 | argv.extend(arg) 11 | 12 | ret = lib.run_program( \ 13 | main_path=self.config.main_path, \ 14 | work_path=self.config.work_path, \ 15 | result_file_name=self.config.result_path + "/run_compiler_result.txt", \ 16 | input_file_name="/dev/null", \ 17 | output_file_name="stderr", \ 18 | error_file_name=self.config.result_path + "/compiler_result.txt", \ 19 | limit=lib.RL_COMPILER_DEFAULT, \ 20 | para_list=argv, \ 21 | uoj_offline=("uoj_offline" in self.config.config)) 22 | res = lib.RunCompilerResult(type=ret.type, ust=ret.ust, usm=ret.usm, \ 23 | succeeded=(ret.type == lib.RS_AC) and (ret.exit_code == 0)) 24 | if not res.succeeded: 25 | if res.type == lib.RS_AC: 26 | res.info = lib.file_preview(self.config.result_path + "/compiler_result.txt", 500) 27 | elif res.type == lib.RS_JGF: 28 | res.info = "No Comment" 29 | else: 30 | res.info = "Compiler " + lib.info_str(res.type) 31 | return res 32 | 33 | def compile_cpp(self, name, path=None): 34 | path = path or self.config.work_path 35 | argv = ["/usr/bin/g++", "-o", name, "-x", "c++", "answer.code", "-std=c++11", "-lm", "-O2", "-DONLINE_JUDGE"] 36 | return self.run_compiler(path, argv) 37 | 38 | def compile_command(self, para, path=None): 39 | path = path or self.config.work_path 40 | argv = para.split(' ') 41 | return self.run_compiler(path, argv) 42 | 43 | def compile(self, para): 44 | name = para 45 | if name + '_language' in self.config.config: 46 | lang = self.config.config[name + '_language'] 47 | print("has a language :", lang) 48 | #TODO check language type 49 | return self.compile_cpp(name) 50 | else: 51 | return self.compile_cpp(name) 52 | 53 | # if __name__ == "__main__": 54 | # def test(): 55 | # C = pyjudgerConfig() 56 | # os.chdir(C.work_path) 57 | # my_compiler = pyjudgerCompiler(C) 58 | # #以下是两种编译方法 59 | # #1. 默认编译 60 | # my_compiler.compile("main") 61 | # #2. 使用 g++ 或者 g++-4.8 或者直接用 /usr/bin/g++-4.8 62 | # #my_compiler.custom_compile("g++ -o main -x c++ main.code -lm -O2 -DONLINE_JUDGE") 63 | # test() 64 | -------------------------------------------------------------------------------- /data/37/1/uoj_judger_config.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import os 3 | class pyjudgerConfig: 4 | def __init__(self, main_path, work_path, result_path, data_path): 5 | self.config = dict() 6 | 7 | def load_config(config_file): 8 | configs = open(config_file, 'r').readlines() 9 | for each_config in configs: 10 | key, value = each_config.strip('\n').strip('\r').split(' ') 11 | self.config[key] = value 12 | 13 | self.main_path = main_path 14 | self.work_path = work_path 15 | self.result_path = result_path 16 | load_config(self.work_path + "/submission.conf") 17 | self.problem_id = self.config['problem_id'] 18 | self.data_path = data_path 19 | load_config(self.data_path + "/problem.conf") 20 | self.exec_file_name = "./main" 21 | 22 | #exec("cp %s/require/* %s 2>/dev/null"%(self.__data_path, self.__work_path)) 23 | 24 | #这里可以修改 25 | if "use_builtin_checker" in self.config: 26 | self.config["checker"] = self.main_path + "/builtin/checker/" + self.config["use_builtin_checker"] 27 | else: 28 | self.config["checker"] = self.data_path + "/chk" 29 | self.config["validator"] = self.data_path + "/val" 30 | 31 | #os.chdir(self.work_path) 32 | -------------------------------------------------------------------------------- /data/37/1/uoj_judger_reporter.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | from uoj_judger_config import * 3 | import judger_class_lib as lib 4 | import fcntl 5 | 6 | class pyjudgerReporter: 7 | def __init__(self, config, test_num): 8 | self.config = config 9 | self.tot_time = 0 10 | self.max_memory = 0 11 | self.details_out = "" 12 | self.tot_score = 0 13 | self.test_num = test_num 14 | 15 | def report_judgement_status(self, info): 16 | print(self.config.result_path+"/cur_status.txt") 17 | F = open(self.config.result_path+"/cur_status.txt", "w") 18 | fcntl.flock(F.fileno(), fcntl.LOCK_EX) 19 | F.write(info[:512]) 20 | 21 | def add_point_info(self, info): 22 | if info.ust >= 0: 23 | self.tot_time += info.ust 24 | if info.usm >= self.max_memory: 25 | self.max_memory = info.usm 26 | self.details_out += ""\ 27 | % (info.num, info.scr / self.test_num, info.info, info.ust, info.usm) 28 | self.tot_score += info.scr / self.test_num 29 | if info.input: 30 | self.details_out += "%s" % (lib.htmlspecialchars(info.input)) 31 | if info.output: 32 | self.details_out += "%s" % (lib.htmlspecialchars(info.output)) 33 | if info.res: 34 | self.details_out += "%s" % (lib.htmlspecialchars(info.res)) 35 | if info.extrainfo: 36 | self.details_out += info.extrainfo 37 | self.details_out += "\n" 38 | 39 | def add_subtask_info(self, subTaskIndex, scr=0, info="", points=None): 40 | self.details_out += "\n") 58 | F.write(self.details_out) 59 | F.write("\n") 60 | F.close() 61 | exit(0) 62 | 63 | def end_judge_judgement_failed(self, info=""): 64 | F = open(self.config.result_path+"/result.txt", "w") 65 | F.write("error Judgment Failed\n") 66 | F.write("details\n") 67 | F.write("%s\n" % lib.htmlspecialchars(info)) 68 | F.close() 69 | exit(0) 70 | 71 | def end_judge_compile_error(self, info=""): 72 | F = open(self.config.result_path+"/result.txt", "w") 73 | F.write("error Compile Error\n") 74 | F.write("details\n") 75 | F.write("%s\n" % lib.htmlspecialchars(info)) 76 | F.close() 77 | exit(0) 78 | 79 | def end_judge_custom_error(self, label, info=""): 80 | F = open(self.config.result_path+"/result.txt", "w") 81 | F.write("error %s\n" % label) 82 | F.write("details\n") 83 | F.write("%s\n" % lib.htmlspecialchars(info)) 84 | F.close() 85 | exit(0) 86 | -------------------------------------------------------------------------------- /data/60/1/Makefile: -------------------------------------------------------------------------------- 1 | export INCLUDE_PATH 2 | CXXFLAGS = -I$(INCLUDE_PATH) -O2 -std=c++11 3 | 4 | all: 5 | chmod +x judger -------------------------------------------------------------------------------- /data/60/1/answer.txt: -------------------------------------------------------------------------------- 1 | C 2 | A 3 | CD 4 | A 5 | C 6 | A 7 | -------------------------------------------------------------------------------- /data/60/1/judger: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | #coding=utf-8 3 | 4 | import sys 5 | import os 6 | 7 | import judger_class_lib as lib 8 | from uoj_judger_compiler import * 9 | from uoj_judger_tester import * 10 | from uoj_judger_reporter import * 11 | from uoj_judger_config import * 12 | 13 | def check(n, file_name, answer_file): 14 | 15 | valid_flag = [] 16 | valid_info = [] 17 | final_flag = [] 18 | final_info = [] 19 | 20 | f = open(file_name) 21 | ans = open(answer_file) 22 | lines = f.readlines() 23 | ans_lines = ans.readlines() 24 | 25 | #if len(lines) < n: 26 | # return False, "Only %d lines, < %d" % (len(lines), n), final_flag, final_info 27 | 28 | for i in range(n): 29 | 30 | if len(lines) <= i: 31 | valid_flag.append(False) 32 | valid_info.append("Only %d lines, < %d" % (len(lines), n)) 33 | final_flag.append(False) 34 | final_info.append("Only %d lines, < %d" % (len(lines), n)) 35 | continue 36 | 37 | select = set() 38 | answer = [] 39 | 40 | flag = False 41 | for c in lines[i].strip(): 42 | if c in "ABCD": 43 | select.add(c) 44 | else: 45 | valid_flag.append(False) 46 | valid_info.append("Invalid token %c at line %d" % (c, i + 1)) 47 | final_flag.append(False) 48 | final_info.append("Invalid token %c at line %d" % (c, i + 1)) 49 | flag=True 50 | break 51 | if flag: 52 | continue 53 | 54 | now = set() 55 | for c in ans_lines[i].strip(): 56 | if c in "ABCD": 57 | now.add(c) 58 | elif c == '|': 59 | answer.append(now) 60 | now = set() 61 | if len(now) > 0: 62 | answer.append(now) 63 | 64 | 65 | valid_flag.append(True) 66 | valid_info.append("Valid answer: %s" % sorted(list(select))) 67 | 68 | final_flag.append(0) 69 | final_info.append("Wrong Answer at line %d" % (i+1)) 70 | for now in answer: 71 | correct_num = sum([c in now for c in select]) 72 | if correct_num == len(now) and correct_num == len(select): 73 | final_flag[-1] = 1 74 | final_info[-1] = "ok" 75 | break 76 | elif correct_num == len(select) and correct_num > 0: 77 | final_flag[-1] = 0.5 78 | final_info[-1] = "Missing option at line %d" % (i+1) 79 | 80 | 81 | return valid_flag, valid_info, final_flag, final_info 82 | 83 | if __name__=="__main__": 84 | main_path = sys.argv[1] 85 | work_path = sys.argv[2] 86 | result_path = sys.argv[3] 87 | data_path = sys.argv[4] 88 | 89 | C = pyjudgerConfig(main_path, work_path, result_path, data_path) 90 | n = int(C.config["n_tests"]) 91 | R = pyjudgerReporter(C, n) 92 | Co = pyjudgerCompiler(C) 93 | T = pyjudger_custom_tester(C) 94 | 95 | R.report_judgement_status("Judging") 96 | 97 | try: 98 | valid, valid_info, final, final_info = check(n, work_path+"/answer.txt", data_path+"/answer.txt") 99 | except UnicodeDecodeError as e: 100 | R.add_point_info(lib.PointInfo(1, 0, info="Invalid Answer", res="Cannot read the answer file, make sure the file only contains English characters.\n" + str(e))) 101 | R.end_judge_ok() 102 | sys.exit(0) 103 | 104 | if "uoj_offline" not in C.config: 105 | submission_record = "/home/local_main_judger/submission_record/" + C.config["problem_id"] 106 | try: 107 | os.makedirs(submission_record, exist_ok=True) 108 | except: 109 | raise RuntimeError("cannot save records, report to TA") 110 | try: 111 | records = open(submission_record + "/" + C.config["submitter"]).readlines() 112 | submits = [int(x) for x in records] 113 | except: 114 | submits = [] 115 | if int(C.config["id"]) not in submits: 116 | submits.append(int(C.config["id"])) 117 | try: 118 | with open(submission_record + "/" + C.config["submitter"], 'w') as f: 119 | for x in submits: 120 | f.write(str(x) + "\n") 121 | except: 122 | raise RuntimeError("cannot save records, report to TA") 123 | 124 | if sum([int(C.config["id"]) > x for x in submits]) >= 10: 125 | show_score = 50 126 | else: 127 | show_score = 80 if sum(final) / n > 0.8 else 0 128 | else: 129 | show_score = 80 if sum(final) / n > 0.8 else 0 130 | 131 | for i in range(n): 132 | if "test_sample_only" in C.config: 133 | if valid[i]: 134 | R.add_point_info(lib.PointInfo(i+1, show_score, info="Acceptable Answer", res=valid_info[i])) 135 | else: 136 | R.add_point_info(lib.PointInfo(i+1, show_score, info="Invalid Answer", res=valid_info[i])) 137 | else: 138 | if final[i] == 1: 139 | R.add_point_info(lib.PointInfo(i+1, 100, info="Accepted", res=final_info[i])) 140 | else: 141 | R.add_point_info(lib.PointInfo(i+1, int(final[i] * 100), info="Wrong Answer", res=final_info[i])) 142 | R.end_judge_ok() 143 | -------------------------------------------------------------------------------- /data/60/1/problem.conf: -------------------------------------------------------------------------------- 1 | use_python3_judger on 2 | version 1 3 | n_tests 6 -------------------------------------------------------------------------------- /data/60/1/problem.md: -------------------------------------------------------------------------------- 1 | 第10课 2 | 3 | 1. 下面关于模板特化正确的有 4 | A. 函数模板可以部分特化 5 | B. 类模板可以全部特化也可以部分特化 6 | C. 函数模板特化的类型在一些情况下无需指定,可以由编译器自行推导出 7 | D. 程序在运行时才会选择是使用基础函数模板还是特化的模板 8 | 9 | 2. 按照C++标准中对vector操作的要求,描述正确的是 10 | 11 | ```c++ 12 | #include 13 | #include 14 | using namespace std; 15 | 16 | int main(){ 17 | vector vec = {1,2,3,4,5}; 18 | auto a = vec.end(); 19 | auto b = vec.begin(); 20 | auto c = vec.begin() + 2; 21 | auto d = vec.erase(vec.begin() + 1); 22 | return 0; 23 | } 24 | ``` 25 | 26 | A. 在erase执行前,`a`指向的整型数据的值为5 27 | 28 | B. 在main函数返回前,`b`仍然有效,最终指向的整型数据的值为1 29 | 30 | C. 在main函数返回前,`c`仍然有效,最终指向的整型数据的值为3 31 | 32 | D. 在main函数返回前,`d`仍然有效,最终指向的整型数据的值为2 33 | 34 | 3. 下列关于STL说法正确的是: 35 | 36 | A. list中插入删除操作会使操作位置之后的迭代器失效 37 | 38 | B. map中元素的key不可重复 39 | 40 | C. set中的元素不是按插入顺序排序,而是按照值排序 41 | 42 | D. vector使用insert随机插入元素的平均复杂度为O(1) 43 | 44 | 第十一课 45 | 46 | 4. 下列关于string类的说法正确的是 47 | 48 | A. 使用循环和operator+拼接string类的多个对象,假设长度为常数,则其时间复杂度与对象个数的平方成正比。 49 | 50 | B. 使用string类的优势之一在于string类对象之间可以方便地使用+、==、<、>等运算符进行运算。 51 | 52 | C. string类对象可以通过cin的operator>>从标准输入中输入字符串,直至遇见换行符或文件结束才会停止。 53 | 54 | D. string类对象只能通过迭代器访问元素,不能通过位置索引访问元素 55 | 56 | 57 | 5 下列说法中正确的是 58 | 59 | A. endl可以看作是ostream类的对象,可将其与流运算符搭配将换行符写入输出流并清空缓冲区 60 | 61 | B. ostream类不允许复制,但允许移动 62 | 63 | C. istream和ostream都是iostream的子类,分别继承了输入和输出的功能 64 | 65 | D. stringstream利用对象内部的buffer实现输入和输出,使用clear()函数可以清空buffer 66 | 67 | 68 | 6. 下面关于字符串匹配的说法正确的是 69 | 70 | A. 正则表达式``ooo?o?p``能匹配``oop``,而不能匹配``ooop``和``oooop`` 71 | 72 | B. 正则表达式``-?\d*(\.\d*)?``可以匹配``-1``, ``12.1``,不能匹配``1.`` 73 | 74 | C. 用正则表达式``([a-z]*)(\d)(?:[A-Z]+) (?:[a-z]*) (\d+)``匹配字符串``0SYYxkk1``,捕获到的分组中2号是0 75 | 76 | D. 用正则表达式``^[1-9]\d{0,3}-(1[0-2]|0?[1-9])-(3[01]|[12]\d|0?[1-9])$``可以匹配``2020-5-1``或``2020-05-01`` 77 | 78 | 79 | 80 | 第十二课 81 | 82 | 7 关于以下代码,说法正确的是 83 | 84 | ``` 85 | #include 86 | #include 87 | using namespace std; 88 | 89 | bool compPt(int a, int b) 90 | { 91 | return a < b; 92 | } 93 | 94 | class CompCls 95 | { 96 | public: 97 | bool operator()(int a, int b) const 98 | { 99 | return a < b; 100 | } 101 | }; 102 | 103 | function fn = compPt; 104 | 105 | template 106 | void mysort1(T* first, T* last, Compare comp) 107 | { 108 | for (auto i = first; i != last; i++) 109 | for (auto j = i; j != last; j++) 110 | if (!comp(*i, *j)) swap(*i, *j); 111 | } 112 | 113 | template 114 | void mysort2(T* first, T* last, function comp) 115 | { 116 | for (auto i = first; i != last; i++) 117 | for (auto j = i; j != last; j++) 118 | if (!comp(*i, *j)) swap(*i, *j); 119 | } 120 | 121 | int main() 122 | { 123 | int arr[] = {2, 1, 3, 5, 4}; 124 | //(1) 125 | return 0; 126 | } 127 | ``` 128 | 129 | 130 | A (1)处,如果要调用mysort1,第三个参数可以接受compPt, CompCls(),但不能接受fn。 131 | 132 | B (1)处,如果要调用mysort2,第三个参数可以接受compPt, CompCls()和fn。 133 | 134 | C mysort1和mysort2的区别在于,comp在mysort1中是早绑定,在mysort2中是晚绑定。 135 | 136 | D compPt(1,2) CompCls(1, 2) fn(1,2) 的返回值都是True 137 | 138 | 139 | 8 对于以下代码,正确的有 140 | 141 | ``` 142 | #include 143 | #include 144 | using namespace std; 145 | void f(shared_ptr p1){ 146 | cout << p1.use_count(); 147 | static auto t2 = p1; 148 | } 149 | int main() 150 | { 151 | int &x = new int(1); 152 | { 153 | shared_ptr p1(x); 154 | f(p1); 155 | cout << p1.use_count(); 156 | f(p1); 157 | cout << p1.use_count(); 158 | } 159 | //(1) 160 | return 0; 161 | } 162 | ``` 163 | 164 | A 输出是 2232 165 | 166 | B 输出是 1222 167 | 168 | C 在(1)处,x已经被析构 169 | 170 | D 若在(1)处加入``shared_ptr p2(x); ``,则可能导致x被析构两次。 171 | 172 | 173 | 9 关于智能指针的以下说法正确的有 174 | 175 | A 当动态创建的对象被多处引用,可以使用shared_ptr自动的管理该对象的销毁 176 | 177 | B ``shared_ptr``\``weak_ptr``\``unique_ptr`` 都使用了引用计数的方法,可以通过``use_count``函数访问当前指针的引用计数数量 178 | 179 | C ``shared_ptr``可以复制构造、移动构造,但``weak_ptr``和``unique_ptr``只能移动构造,不能复制构造 180 | 181 | D 对于会产生引用循环的情况,只要全部使用``weak_ptr``就能解决问题。 -------------------------------------------------------------------------------- /data/60/1/uoj_judger_compiler.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import judger_class_lib as lib 3 | 4 | class pyjudgerCompiler(object): 5 | def __init__(self, config): 6 | self.config = config 7 | 8 | def run_compiler(self, path, arg): 9 | argv = ["--type=compiler", "--work-path=" + path] 10 | argv.extend(arg) 11 | 12 | ret = lib.run_program( \ 13 | main_path=self.config.main_path, \ 14 | work_path=self.config.work_path, \ 15 | result_file_name=self.config.result_path + "/run_compiler_result.txt", \ 16 | input_file_name="/dev/null", \ 17 | output_file_name="stderr", \ 18 | error_file_name=self.config.result_path + "/compiler_result.txt", \ 19 | limit=lib.RL_COMPILER_DEFAULT, \ 20 | para_list=argv, \ 21 | uoj_offline=("uoj_offline" in self.config.config)) 22 | res = lib.RunCompilerResult(type=ret.type, ust=ret.ust, usm=ret.usm, \ 23 | succeeded=(ret.type == lib.RS_AC) and (ret.exit_code == 0)) 24 | if not res.succeeded: 25 | if res.type == lib.RS_AC: 26 | res.info = lib.file_preview(self.config.result_path + "/compiler_result.txt", 500) 27 | elif res.type == lib.RS_JGF: 28 | res.info = "No Comment" 29 | else: 30 | res.info = "Compiler " + lib.info_str(res.type) 31 | return res 32 | 33 | def compile_cpp(self, name, path=None): 34 | path = path or self.config.work_path 35 | argv = ["/usr/bin/g++", "-o", name, "-x", "c++", "answer.code", "-std=c++11", "-lm", "-O2", "-DONLINE_JUDGE"] 36 | return self.run_compiler(path, argv) 37 | 38 | def compile_command(self, para, path=None): 39 | path = path or self.config.work_path 40 | argv = para.split(' ') 41 | return self.run_compiler(path, argv) 42 | 43 | def compile(self, para): 44 | name = para 45 | if name + '_language' in self.config.config: 46 | lang = self.config.config[name + '_language'] 47 | print("has a language :", lang) 48 | #TODO check language type 49 | return self.compile_cpp(name) 50 | else: 51 | return self.compile_cpp(name) 52 | 53 | # if __name__ == "__main__": 54 | # def test(): 55 | # C = pyjudgerConfig() 56 | # os.chdir(C.work_path) 57 | # my_compiler = pyjudgerCompiler(C) 58 | # #以下是两种编译方法 59 | # #1. 默认编译 60 | # my_compiler.compile("main") 61 | # #2. 使用 g++ 或者 g++-4.8 或者直接用 /usr/bin/g++-4.8 62 | # #my_compiler.custom_compile("g++ -o main -x c++ main.code -lm -O2 -DONLINE_JUDGE") 63 | # test() 64 | -------------------------------------------------------------------------------- /data/60/1/uoj_judger_config.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import os 3 | class pyjudgerConfig: 4 | def __init__(self, main_path, work_path, result_path, data_path): 5 | self.config = dict() 6 | 7 | def load_config(config_file): 8 | configs = open(config_file, 'r').readlines() 9 | for each_config in configs: 10 | key, value = each_config.strip('\n').strip('\r').split(' ') 11 | self.config[key] = value 12 | 13 | self.main_path = main_path 14 | self.work_path = work_path 15 | self.result_path = result_path 16 | load_config(self.work_path + "/submission.conf") 17 | self.problem_id = self.config['problem_id'] 18 | self.data_path = data_path 19 | load_config(self.data_path + "/problem.conf") 20 | self.exec_file_name = "./main" 21 | 22 | #exec("cp %s/require/* %s 2>/dev/null"%(self.__data_path, self.__work_path)) 23 | 24 | #这里可以修改 25 | if "use_builtin_checker" in self.config: 26 | self.config["checker"] = self.main_path + "/builtin/checker/" + self.config["use_builtin_checker"] 27 | else: 28 | self.config["checker"] = self.data_path + "/chk" 29 | self.config["validator"] = self.data_path + "/val" 30 | 31 | #os.chdir(self.work_path) 32 | -------------------------------------------------------------------------------- /data/60/1/uoj_judger_reporter.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | from uoj_judger_config import * 3 | import judger_class_lib as lib 4 | import fcntl 5 | 6 | class pyjudgerReporter: 7 | def __init__(self, config, test_num): 8 | self.config = config 9 | self.tot_time = 0 10 | self.max_memory = 0 11 | self.details_out = "" 12 | self.tot_score = 0 13 | self.test_num = test_num 14 | 15 | def report_judgement_status(self, info): 16 | print(self.config.result_path+"/cur_status.txt") 17 | F = open(self.config.result_path+"/cur_status.txt", "w") 18 | fcntl.flock(F.fileno(), fcntl.LOCK_EX) 19 | F.write(info[:512]) 20 | 21 | def add_point_info(self, info): 22 | if info.ust >= 0: 23 | self.tot_time += info.ust 24 | if info.usm >= self.max_memory: 25 | self.max_memory = info.usm 26 | self.details_out += ""\ 27 | % (info.num, info.scr / self.test_num, info.info, info.ust, info.usm) 28 | self.tot_score += info.scr / self.test_num 29 | if info.input: 30 | self.details_out += "%s" % (lib.htmlspecialchars(info.input)) 31 | if info.output: 32 | self.details_out += "%s" % (lib.htmlspecialchars(info.output)) 33 | if info.res: 34 | self.details_out += "%s" % (lib.htmlspecialchars(info.res)) 35 | if info.extrainfo: 36 | self.details_out += info.extrainfo 37 | self.details_out += "\n" 38 | 39 | def add_subtask_info(self, subTaskIndex, scr=0, info="", points=None): 40 | self.details_out += "\n") 58 | F.write(self.details_out) 59 | F.write("\n") 60 | F.close() 61 | exit(0) 62 | 63 | def end_judge_judgement_failed(self, info=""): 64 | F = open(self.config.result_path+"/result.txt", "w") 65 | F.write("error Judgment Failed\n") 66 | F.write("details\n") 67 | F.write("%s\n" % lib.htmlspecialchars(info)) 68 | F.close() 69 | exit(0) 70 | 71 | def end_judge_compile_error(self, info=""): 72 | F = open(self.config.result_path+"/result.txt", "w") 73 | F.write("error Compile Error\n") 74 | F.write("details\n") 75 | F.write("%s\n" % lib.htmlspecialchars(info)) 76 | F.close() 77 | exit(0) 78 | 79 | def end_judge_custom_error(self, label, info=""): 80 | F = open(self.config.result_path+"/result.txt", "w") 81 | F.write("error %s\n" % label) 82 | F.write("details\n") 83 | F.write("%s\n" % lib.htmlspecialchars(info)) 84 | F.close() 85 | exit(0) 86 | -------------------------------------------------------------------------------- /find_problem_id.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | with open("./submission.conf", "r") as fin: 3 | run_config = {} 4 | for line in fin: 5 | key, value = line.strip('\n').strip('\r').split(' ') 6 | run_config[key] = value 7 | tmp = line.strip().split() 8 | if line.strip().split()[0] == "problem_id": 9 | print tmp[1] 10 | 11 | run_config["uoj_offline"] = "on" 12 | with open("./work/submission.conf", "w") as fout: 13 | for key in run_config: 14 | fout.write("%s %s\n"%(key, run_config[key])) -------------------------------------------------------------------------------- /find_python_version.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import sys 3 | with open("./data/%s/1/problem.conf"%(sys.argv[1]), "r") as fin: 4 | run_config = {} 5 | configs = fin.readlines() 6 | for each_config in configs: 7 | key, value = each_config.strip('\n').strip('\r').split(' ') 8 | run_config[key] = value 9 | if ("use_python3_judger" in run_config) and (run_config["use_python3_judger"] == "on"): 10 | print "python3" 11 | else: 12 | print "python" 13 | -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | path=/Users/jian/Jian/Lab/2021oop/UOJ_Offline 2 | filename="./" 3 | rm -r ./work 4 | rm -r ./result 5 | rm ./judger 6 | mkdir ./result 7 | mkdir ./work 8 | id=`python2 ./find_problem_id.py` 9 | cp -r ./data/$id/1/submit/* ./work 10 | cp ./data/$id/1/require/* ./work 11 | cp -r ./data/$id/1/judger ./ 12 | python_version=`python2 ./find_python_version.py $id` 13 | $python_version ./judger $path $path/work $path/result/ $path/data/$id/1 14 | cat ./result/result.txt 15 | rm ./judger -------------------------------------------------------------------------------- /submission.conf: -------------------------------------------------------------------------------- 1 | answer_language C++11 2 | problem_id 60 -------------------------------------------------------------------------------- /uoj_judger_compiler.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import judger_class_lib as lib 3 | 4 | class pyjudgerCompiler(object): 5 | def __init__(self, config): 6 | self.config = config 7 | 8 | def run_compiler(self, path, arg): 9 | argv = ["--type=compiler", "--work-path=" + path] 10 | argv.extend(arg) 11 | 12 | ret = lib.run_program( \ 13 | main_path=self.config.main_path, \ 14 | work_path=self.config.work_path, \ 15 | result_file_name=self.config.result_path + "/run_compiler_result.txt", \ 16 | input_file_name="/dev/null", \ 17 | output_file_name="stderr", \ 18 | error_file_name=self.config.result_path + "/compiler_result.txt", \ 19 | limit=lib.RL_COMPILER_DEFAULT, \ 20 | para_list=argv, \ 21 | uoj_offline=("uoj_offline" in self.config.config)) 22 | res = lib.RunCompilerResult(type=ret.type, ust=ret.ust, usm=ret.usm, \ 23 | succeeded=(ret.type == lib.RS_AC) and (ret.exit_code == 0)) 24 | if not res.succeeded: 25 | if res.type == lib.RS_AC: 26 | res.info = lib.file_preview(self.config.result_path + "/compiler_result.txt", 500) 27 | elif res.type == lib.RS_JGF: 28 | res.info = "No Comment" 29 | else: 30 | res.info = "Compiler " + lib.info_str(res.type) 31 | return res 32 | 33 | def compile_cpp(self, name, path=None): 34 | path = path or self.config.work_path 35 | argv = ["/usr/bin/g++", "-o", name, "-x", "c++", "answer.code", "-std=c++11", "-lm", "-O2", "-DONLINE_JUDGE"] 36 | return self.run_compiler(path, argv) 37 | 38 | def compile_command(self, para, path=None): 39 | path = path or self.config.work_path 40 | argv = para.split(' ') 41 | return self.run_compiler(path, argv) 42 | 43 | def compile(self, para): 44 | name = para 45 | if name + '_language' in self.config.config: 46 | lang = self.config.config[name + '_language'] 47 | print("has a language :", lang) 48 | #TODO check language type 49 | return self.compile_cpp(name) 50 | else: 51 | return self.compile_cpp(name) 52 | 53 | # if __name__ == "__main__": 54 | # def test(): 55 | # C = pyjudgerConfig() 56 | # os.chdir(C.work_path) 57 | # my_compiler = pyjudgerCompiler(C) 58 | # #以下是两种编译方法 59 | # #1. 默认编译 60 | # my_compiler.compile("main") 61 | # #2. 使用 g++ 或者 g++-4.8 或者直接用 /usr/bin/g++-4.8 62 | # #my_compiler.custom_compile("g++ -o main -x c++ main.code -lm -O2 -DONLINE_JUDGE") 63 | # test() 64 | -------------------------------------------------------------------------------- /uoj_judger_config.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import os 3 | class pyjudgerConfig: 4 | def __init__(self, main_path, work_path, result_path, data_path): 5 | self.config = dict() 6 | 7 | def load_config(config_file): 8 | configs = open(config_file, 'r').readlines() 9 | for each_config in configs: 10 | key, value = each_config.strip('\n').strip('\r').split(' ') 11 | self.config[key] = value 12 | 13 | self.main_path = main_path 14 | self.work_path = work_path 15 | self.result_path = result_path 16 | load_config(self.work_path + "/submission.conf") 17 | self.problem_id = self.config['problem_id'] 18 | self.data_path = data_path 19 | load_config(self.data_path + "/problem.conf") 20 | self.exec_file_name = "./main" 21 | 22 | #exec("cp %s/require/* %s 2>/dev/null"%(self.__data_path, self.__work_path)) 23 | 24 | #这里可以修改 25 | if "use_builtin_checker" in self.config: 26 | self.config["checker"] = self.main_path + "/builtin/checker/" + self.config["use_builtin_checker"] 27 | else: 28 | self.config["checker"] = self.data_path + "/chk" 29 | self.config["validator"] = self.data_path + "/val" 30 | 31 | #os.chdir(self.work_path) 32 | -------------------------------------------------------------------------------- /uoj_judger_reporter.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | from uoj_judger_config import * 3 | import judger_class_lib as lib 4 | import fcntl 5 | 6 | class pyjudgerReporter: 7 | def __init__(self, config, test_num): 8 | self.config = config 9 | self.tot_time = 0 10 | self.max_memory = 0 11 | self.details_out = "" 12 | self.tot_score = 0 13 | self.test_num = test_num 14 | 15 | def report_judgement_status(self, info): 16 | print(self.config.result_path+"/cur_status.txt") 17 | F = open(self.config.result_path+"/cur_status.txt", "w") 18 | fcntl.flock(F.fileno(), fcntl.LOCK_EX) 19 | F.write(info[:512]) 20 | 21 | def add_point_info(self, info): 22 | if info.ust >= 0: 23 | self.tot_time += info.ust 24 | if info.usm >= self.max_memory: 25 | self.max_memory = info.usm 26 | self.details_out += ""\ 27 | % (info.num, info.scr / self.test_num, info.info, info.ust, info.usm) 28 | self.tot_score += info.scr / self.test_num 29 | if info.input: 30 | self.details_out += "%s" % (lib.htmlspecialchars(info.input)) 31 | if info.output: 32 | self.details_out += "%s" % (lib.htmlspecialchars(info.output)) 33 | if info.res: 34 | self.details_out += "%s" % (lib.htmlspecialchars(info.res)) 35 | if info.extrainfo: 36 | self.details_out += info.extrainfo 37 | self.details_out += "\n" 38 | 39 | def add_subtask_info(self, subTaskIndex, scr=0, info="", points=None): 40 | self.details_out += "\n") 58 | F.write(self.details_out) 59 | F.write("\n") 60 | F.close() 61 | exit(0) 62 | 63 | def end_judge_judgement_failed(self, info=""): 64 | F = open(self.config.result_path+"/result.txt", "w") 65 | F.write("error Judgment Failed\n") 66 | F.write("details\n") 67 | F.write("%s\n" % lib.htmlspecialchars(info)) 68 | F.close() 69 | exit(0) 70 | 71 | def end_judge_compile_error(self, info=""): 72 | F = open(self.config.result_path+"/result.txt", "w") 73 | F.write("error Compile Error\n") 74 | F.write("details\n") 75 | F.write("%s\n" % lib.htmlspecialchars(info)) 76 | F.close() 77 | exit(0) 78 | 79 | def end_judge_custom_error(self, label, info=""): 80 | F = open(self.config.result_path+"/result.txt", "w") 81 | F.write("error %s\n" % label) 82 | F.write("details\n") 83 | F.write("%s\n" % lib.htmlspecialchars(info)) 84 | F.close() 85 | exit(0) 86 | --------------------------------------------------------------------------------