TopCoder 提出編
過去問を解きました。
...が、問題を解いた時間 < 提出にかかった時間 となったので記録に残します。
まず、任意の過去問に移動して解く問題をselectするとGreedによって提出用ファイルがローカルに勝手に生成されます↓
※要 Java applet の option で default言語指定(cpp)
#include <bits/stdc++.h> using namespace std; #define REP(i,n) for(int i=0; i<(n); i++) #define REP2(i,x,n) for(int i=x; i<(n); i++) #define SORTR(x) {sort((x).begin(),(x).end());reverse((x).begin(),(x).end());} #define ALL(x) begin(x),end(x) #define rALL(x) rbegin(x),rend(x) #define D(x) for_each((x).begin(),(x).end(),[](auto& x){cout<<x<<" ";}); using LL=long long; using ULL=unsigned long long; using PII=pair<int,int>; struct cww{cww(){ios::sync_with_stdio(false);cin.tie(0);}}star; const int INF = numeric_limits<int>::max(); struct LiveConcert { vector<int> h; vector<string> s; int maxHappiness(vector<int> _h, vector<string> _s) { h = _h, s = _s; return 0; } }; // CUT begin ifstream data("LiveConcert.sample"); string next_line() { string s; getline(data, s); return s; } template <typename T> void from_stream(T &t) { stringstream ss(next_line()); ss >> t; } void from_stream(string &s) { s = next_line(); } template <typename T> void from_stream(vector<T> &ts) { int len; from_stream(len); ts.clear(); for (int i = 0; i < len; ++i) { T t; from_stream(t); ts.push_back(t); } } template <typename T> string to_string(T t) { stringstream s; s << t; return s.str(); } string to_string(string t) { return "\"" + t + "\""; } bool do_test(vector<int> h, vector<string> s, int __expected) { time_t startClock = clock(); LiveConcert *instance = new LiveConcert(); int __result = instance->maxHappiness(h, s); double elapsed = (double)(clock() - startClock) / CLOCKS_PER_SEC; delete instance; if (__result == __expected) { cout << "PASSED!" << " (" << elapsed << " seconds)" << endl; return true; } else { cout << "FAILED!" << " (" << elapsed << " seconds)" << endl; cout << " Expected: " << to_string(__expected) << endl; cout << " Received: " << to_string(__result) << endl; return false; } } int run_test(bool mainProcess, const set<int> &case_set, const string command) { int cases = 0, passed = 0; while (true) { if (next_line().find("--") != 0) break; vector<int> h; from_stream(h); vector<string> s; from_stream(s); next_line(); int __answer; from_stream(__answer); cases++; if (case_set.size() > 0 && case_set.find(cases - 1) == case_set.end()) continue; cout << " Testcase #" << cases - 1 << " ... "; if ( do_test(h, s, __answer)) { passed++; } } if (mainProcess) { cout << endl << "Passed : " << passed << "/" << cases << " cases" << endl; int T = time(NULL) - 1476520950; double PT = T / 60.0, TT = 75.0; cout << "Time : " << T / 60 << " minutes " << T % 60 << " secs" << endl; cout << "Score : " << 250 * (0.3 + (0.7 * TT * TT) / (10.0 * PT * PT + TT * TT)) << " points" << endl; } return 0; } int main(int argc, char *argv[]) { cout.setf(ios::fixed, ios::floatfield); cout.precision(2); set<int> cases; bool mainProcess = true; for (int i = 1; i < argc; ++i) { if ( string(argv[i]) == "-") { mainProcess = false; } else { cases.insert(atoi(argv[i])); } } if (mainProcess) { cout << "LiveConcert (250 Points)" << endl << endl; } return run_test(mainProcess, cases, argv[0]); } // CUT end
なにこれ状態だったんですが、まず最初にCUTの部分は不要なんだろうと思って削除しました←
でもこれ、実はtestやローカルで出力する為のコードで大変有り難いコードでした...。
仕様が分からないのですが、ARENAでsubmitする時には残っていても影響がないようです。
(もちろん削除してsubmitしても特に影響は無かったです(試した))
因みに...プロに教えて頂いたのですが、
ifstream data("LiveConcert.sample"); の部分を
auto &data = cin; とするとWandBoxで sample test 出来るんですよ!!!
(※WandBoxでなくても出来ます)
struct LiveConcert { vector<int> h; vector<string> s; int maxHappiness(vector<int> _h, vector<string> _s) { h = _h, s = _s; return 0; } };
解答を書いていく部分はここ↑
TopCoderは使用するclass名,関数名,変数名,型など(?)が決められているようです。
問題の解答を return させるように書くっぽい。
AtCoder育ち初心者なのでかなり戸惑いました...。
struct LiveConcert { vector<int> h; vector<string> s; int maxHappiness(vector<int> h, vector<string> s) { vector<pair<int,string>> P; REP( i, (int)h.size() ) { P.emplace_back( h[i], s[i] ); } SORTP( P ); map<string,int> mp; REP( i, (int)h.size() ) { mp.insert( make_pair( P[i].second, P[i].first ) ); } int res{}; for( auto x : mp ) { res += x.second; } return res; } };
↑なんか良く解らないけれど、取り敢えず自分の解答を生成されたコードにmixした。
そしてローカルfileを保存して、java applet でcompileが通った事を確認して、
sample testして合ってそうだったらsubmit。
(他の機能はまだ解らないです)
ACとか出ない....
自分で java applet の Practice options の Run System test っていう所を見に行く
ケースが全部 Passed してたら多分ACしてるっぽい...(?)
まだかなり手探りなので、違う箇所あったら随時記事を修正します...(おしまい)