數據生成器
版權聲明!
本數據生成器由長春吉大附中實驗學校衣然@Yirannn同學自主開發。開發者擁有並保留本產品的全部權利。對於任何未經其本人允許而將本產品用於任何盈利或非盈利用途的行為,以及未注明版權的轉載,開發者保留追究其法律責任的權利。
數據生成器:
# ~/usr/bin/python3
# A Simple Data Generator For OIers By Yirannn
# Made By Python
# Have Fun to Generator Data !
import os
import random
import sys
from time import time
# 預處理
FErr = open("Err.Log", "w")
sys.stderr = FErr
# 輸入提示
print("請按如下格式補充留在本文件夾的文件")
print("請注意 為保證數據生成隨機,本程序會對main函數傳一個參數, 請使用該參數作為隨機種子")
print("輸入數據生成器 : Gen_1.cpp")
print("輸出數據生成器 : Std_1.cpp")
print("輸出數據對拍器 : Std_2.cpp")
print("本程序編譯命令 : g++ %s.cpp -o %s.exe -O2 -std=c++11")
Problem_Name = input("請輸入題目英文名,本程序將在程序根目錄下創建該名字文件夾並導出數據\n")
while(Problem_Name == "") :
Problem_Name = input("請輸入題目英文名,本程序將在程序根目錄下創建該名字文件夾並導出數據\n")
print("如果需要 Spj 請把Spj程序命名為 'Spj.cpp' 並放在根目錄下")
Need_Spj = input("是否需要Special_Judge程序? 是請輸入 1 否則輸入 0")
# 系統識別
Operator_System = 2 if os.name == "nt" else 1
Clear_Screen = ""
Test = ""
Exist = os.path.exists(Problem_Name)
Error = False
if Operator_System == 1 :
Clear_Screen = "clear"
Test = "diff "
if (Exist != True) :
os.system("mkdir " + "\"" + Problem_Name + "\"")
else :
Clear_Screen = "cls"
Test = "fc "
if (Exist != True) :
os.system("md " + Problem_Name)
if Need_Spj == 1 :
os.system("g++ spj.cpp -o spj -O2")
Test = "Spj "
# 數據生成
while(True) :
while True :
try :
From, End = input("請輸入數據編號范圍 生成完畢請輸入兩個0\n").split()
break
except :
print("請輸入兩個正常的數字!")
os.system(Clear_Screen)
From = int(From)
End = int(End)
if End == 0 :
break
os.system("g++ data.cpp -o Gen_1.exe -O2 -Wl,--stack=40000000")
os.system("g++ test.cpp -o Std_1.exe -O2")
Execute = "./" if Operator_System == 1 else ""
for i in range(From, End+1) :
Num = str(i)
RandomSeed = str(random.randint(1, 100000000))
os.system(Execute + "Gen_1.exe " + Num + " " + RandomSeed + " > " + Problem_Name + "/" + Num + ".in")
Start_Time = time()
os.system(Execute + "Std_1.exe < " + Problem_Name + "/" + Num + ".in > " + Problem_Name + "/" + Num + ".out")
OverA_Time = time()
# os.system(Execute + "Std_2.exe < " + Problem_Name + "/" + Num + ".in > " + Problem_Name + "/" + Num + ".ans")
# OverB_Time = time()
# Jud = os.system(Test + Problem_Name + "/" + Num + ".out " + Problem_Name + "/" + Num + ".ans")
# if Jud != 0 :
# RandomSeed = str(random.randint(1, 100000000))
# print("WA On Gen", Num)
# print("正在嘗試重新生成一組數據,請稍候")
# os.system(Execute + "Gen_1.exe " + Num + " "+ RandomSeed + " > " + Problem_Name + "/" + Num + ".in")
# os.system(Execute + "Std_1.exe < " + Problem_Name + "/" + Num + ".in > " + Problem_Name + "/" + Num + ".out")
# os.system(Execute + "Std_2.exe < " + Problem_Name + "/" + Num + ".in > " + Problem_Name + "/" + Num + ".ans")
# Jud = os.system(Test + Problem_Name + "/" + Num + ".out " + Problem_Name + "/" + Num + ".ans")
# if Jud != 0 :
# print("您的數據生成器或者標程可能出問題了,請修改后再次生成!")
# Error = True
# sys.exit(1)
# else :
# print("AC On Gen ", Num, "Runtime : Std_1 : %f && Std_2 : %f" %(OverA_Time - Start_Time, OverB_Time - OverA_Time))
# os.system("rm " + Problem_Name + "/" + Num + ".ans")
# if(Error) :
# break
# 感謝使用
os.system("del Gen_1.exe")
os.system("del Std_1.exe")
Exist = os.path.exists("Err.log")
close(FErr)
if(Exist) :
os.system("rm Err.log")
使用注意:
數據生成器是python源文件。請使用者自行安裝python后使用python運行。並按其指示操作。
替學長感謝大家的使用和支持~