--- tags: Code --- # 測資 ## .in ```cpp= #pragma GCC optimize("O2") #include<bits/stdc++.h> #define V vector #define pii pair<int,int> #define f first #define s second #define TP template<typename T> #define EB emplace_back #define time_s CLOCKS_PER_SEC #define endl '\n' using namespace std; fstream fin, fout; V<int> nums = {500, 1000, 5000, 10000}; //number of test data V<pii> ranges = {{1000, 1e6}, {1000, 1e6}, {2000, 1e9}, {1e6, 1e9}}; // the range of the test const string id = "a683"; //random mt19937 gen(time(NULL)); clock_t t_start, t_end; string trans(int x) { return string{char('0' + (x / 10)) , char('0' + (x % 10))}; } TP void mtc(int number,pii range, V<T> & vc) { // make test cases // make the test cases uniform_int_distribution<int> dis(range.f, range.s); for(int i = 0; i < number; i++) { int a, b; do{a = dis(gen), b = dis(gen);} while(a == b); vc.EB(a, b); fin << a << ' ' << b; if(i + 1 != number) fin << endl; } } int main () { for(int i = 0;i < 20; i++){ //the i-th test case cout << "---------------------------------" << endl; fin.open(id + "_"+ trans(i) + ".in", ios::out); int number = nums[i/5]; pii range = ranges[i/5]; int N = nums[i/5]; fin << N << ' ' << number << endl; cout << "Making test " << i << " cases" << endl; t_start = clock(); V<pii> vc; mtc(number, range, vc); t_end = clock(); cout << "Complete, Use (" << (double)(t_end - t_start) / time_s << ") second" << endl; fin.close(); } } ``` ## .out ```cpp = #include <bits/stdc++.h> using namespace std; #define V vector const string id = "a683"; const int mod = 1e9 + 7; fstream fin, fout; clock_t t_start, t_end; string trans(int x) { return string{char('0' + (x / 10)), char('0' + (x % 10))}; } int main () { for(int t_i = 0; t_i < 20; t_i++) { t_start = clock(); fin.open(id + "_" + trans(t_i) + ".in", ios::in); fout.open(id + "_" + trans(t_i) + ".out", ios::out); //solution /* 把cin, cout 換成 fin, fout int N; fin >> N; fout << N; */ fin.close(); fout.close(); t_end = clock(); cout << "Build" << t_i << "-th test cases use" << (double)(t_end - t_start)/CLOCKS_PER_SEC << endl;; } } ``` ## 測資 version-2 ```cpp= #include<bits/stdc++.h> #include<cxxabi.h> using namespace std; #define CPS CLOCKS_PER_SEC mt19937 gen( time(0)); #define Data_type int const string problem_id = "a842"; const int test_amount = 20; const map< pair<int,int>, map< string, pair<Data_type,Data_type> > > test_case_range= { { make_pair(0, 3), { { "N", make_pair( (Data_type) 1e4, (Data_type)1e4 )}, { "Q", make_pair( (Data_type) 1e4-3, (Data_type)1e4-3 )} //{ "b", make_pair( (T)1, (T)100000000 )} } }, { make_pair(4, 9), { { "N", make_pair( (Data_type) 1e5, (Data_type)1e5 )}, { "Q", make_pair( (Data_type) 20, (Data_type)20)} //{ "b", make_pair( (Data_type) 1, (Data_type) 100000000 )} } },//........... { make_pair(10, 19), { { "N", make_pair( (Data_type) 5e5, (Data_type)5e5 )}, { "Q", make_pair( (Data_type) 5e5-3, (Data_type)5e5-3 )} //{ "b", make_pair( (Data_type) 1, (Data_type) 100000000 )} } }//........... }; //--------------------------------------------------------------// struct test_data { decltype((test_case_range.begin())->second) get_data(int nth) { for( auto &i : test_case_range ) { if( i.first.first <= nth && nth <= i.first.second ) return i.second; } } }; /*--------------TIME COUNT-----------------------------*/ class Time { public: double get_between( ) { t_end = clock(); double ans = get_time(t_tmp, t_end); t_tmp = t_end; return ans; } double get_all_time() { t_end = clock(); return get_time( t_start, t_end);} double get_time(double t1, double t2) {return double(t2-t1)/double(CPS);}; void start(){t_start = t_tmp =clock();} TIME(){}; private: clock_t t_start, t_end, t_tmp; }; /*---------------DEBUG TOOL--------------------------*/ class debug_tool { public: template<typename T> string get_type(T val,bool short_name = true); string ReplaceAll( string str, const string& from, const string& to); template<typename T> void _debug(T&&x) {cerr<<x << '\n';} template<typename A, typename ...B> void _debug(A&&a, B&&...b) {cerr << a << ' '; _debug(b...);} }; string debug_tool::ReplaceAll( string str, const string& from, const string& to ) { int start_pos = 0; while( (start_pos = str.find( from, start_pos)) != std::string::npos ) { str.replace( start_pos, from.length(), to); start_pos += to.length(); } return str; }; template<typename T> string debug_tool::get_type( T val,bool short_name) { int status; string realname = abi::__cxa_demangle( typeid(val).name(), 0, 0, &status); if( short_name ) { realname = debug_tool::ReplaceAll( realname, "std::", " "); } return realname; } /*------------------------------------------*/ string make_file( const string name, const int nth, const string subtitle = ".in") { /* for example ( a799_00.in ) => make_file( "a799", 0, ".in" ) name => "a799" nth => "00" (you just need to input 0 ) subtitle => ".in" */ if( nth >= 100) { cerr << "your nth " << nth << " need to less than 100"; exit(0); } string nth_name = string{ char( '0'+ (nth/10) ), char( '0' + (nth%10) )}; return string( name + "_" +nth_name+subtitle ); } void re_direct_std( const string file_name, bool cin_file = true, bool cout_file = true) { // if bool is true, it will redirect the std to file name if( cin_file ) freopen( file_name.c_str(), "r", stdin); if( cout_file ) freopen( file_name.c_str(), "w", stdout); } void origin_dircect_std() { //window freopen( "CON", "r", stdin ); freopen( "CON", "w", stdout ); //linux /* freopen( "/dev/console", "r", stdin ); freopen( "/dev/console", "w", stdout ); */ } /* ----------------------------------------------------------------------- */ // if you don't want to researh, just modify after here // use cerr to output the thing you want to watch // or you can just use dstruct test_data; debug_tool DEBUG; test_data dataset; void solve() { /* input your solution here */ } int random_int(int a, int b) { uniform_int_distribution<int> dis(a, b); return dis(gen); } template<typename T> void make_test_cases(T &&test_data ) { /* make your test cases here */ const int N = test_data["N"].first; const int Q = test_data["Q"].first; cout << N << ' ' << Q << '\n'; vector< int > rng(N+1); for( int i = 3; i <= N; ++i) { int f = random_int(0, i-2); int s = random_int(f, i-1); int t = random_int(s, i); cout << f << ' ' << s << ' ' << t << '\n'; } if( Q == N-3 ) { for( int i = 4; i <= N; ++i) { cout << i << '\n'; } } else { for( int i = 0; i < Q; ++i ) { cout << random_int(3, N) << '\n'; } } } int main () {ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); Time tm; tm.start(); for( int _t = 0; _t < test_amount; ++_t) { const string IN_FILE = make_file( problem_id, _t, ".in"); const string OUT_FILE = make_file( problem_id, _t, ".out"); cerr << "start making " << _t << "-th test cases" << '\n'; re_direct_std( IN_FILE, false, true); make_test_cases( dataset.get_data(_t) ); cerr << "use " << tm.get_between() << "(sec) to complete " << _t << "-th test cases " <<'\n'; origin_dircect_std(); re_direct_std( IN_FILE, true, false); re_direct_std( OUT_FILE, false, true ); solve(); cerr << "use " << tm.get_between() << "(sec) to solve the " << _t << "-th test cases " << '\n'; cerr << "------------------------------------\n"; } cerr <<"all use : " << tm.get_all_time() <<" (sec) "; return 0; } ```