結果
問題 | No.5016 Worst Mayor |
ユーザー | ogawakun |
提出日時 | 2023-04-29 16:59:17 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 229 ms / 2,000 ms |
コード長 | 5,759 bytes |
コンパイル時間 | 4,882 ms |
コンパイル使用メモリ | 270,424 KB |
実行使用メモリ | 24,396 KB |
スコア | 3,365,079,900 |
平均クエリ数 | 400.00 |
最終ジャッジ日時 | 2023-04-29 17:01:17 |
合計ジャッジ時間 | 18,719 ms |
ジャッジサーバーID (参考情報) |
judge11 / judge16 |
純コード判定しない問題か言語 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 200 ms
23,664 KB |
testcase_01 | AC | 201 ms
23,376 KB |
testcase_02 | AC | 203 ms
23,400 KB |
testcase_03 | AC | 225 ms
23,664 KB |
testcase_04 | AC | 199 ms
23,376 KB |
testcase_05 | AC | 201 ms
24,024 KB |
testcase_06 | AC | 200 ms
23,520 KB |
testcase_07 | AC | 198 ms
24,300 KB |
testcase_08 | AC | 202 ms
23,640 KB |
testcase_09 | AC | 202 ms
23,340 KB |
testcase_10 | AC | 225 ms
23,412 KB |
testcase_11 | AC | 200 ms
24,036 KB |
testcase_12 | AC | 227 ms
23,844 KB |
testcase_13 | AC | 202 ms
23,640 KB |
testcase_14 | AC | 199 ms
24,036 KB |
testcase_15 | AC | 199 ms
23,376 KB |
testcase_16 | AC | 200 ms
23,424 KB |
testcase_17 | AC | 201 ms
23,664 KB |
testcase_18 | AC | 200 ms
23,424 KB |
testcase_19 | AC | 204 ms
23,628 KB |
testcase_20 | AC | 202 ms
24,024 KB |
testcase_21 | AC | 201 ms
23,988 KB |
testcase_22 | AC | 200 ms
23,520 KB |
testcase_23 | AC | 200 ms
23,556 KB |
testcase_24 | AC | 228 ms
24,024 KB |
testcase_25 | AC | 200 ms
23,676 KB |
testcase_26 | AC | 203 ms
24,036 KB |
testcase_27 | AC | 203 ms
23,988 KB |
testcase_28 | AC | 203 ms
24,036 KB |
testcase_29 | AC | 204 ms
24,312 KB |
testcase_30 | AC | 200 ms
24,012 KB |
testcase_31 | AC | 200 ms
24,036 KB |
testcase_32 | AC | 201 ms
23,832 KB |
testcase_33 | AC | 203 ms
24,396 KB |
testcase_34 | AC | 203 ms
24,300 KB |
testcase_35 | AC | 197 ms
23,628 KB |
testcase_36 | AC | 194 ms
23,424 KB |
testcase_37 | AC | 200 ms
23,712 KB |
testcase_38 | AC | 199 ms
23,832 KB |
testcase_39 | AC | 202 ms
23,628 KB |
testcase_40 | AC | 205 ms
24,000 KB |
testcase_41 | AC | 201 ms
23,640 KB |
testcase_42 | AC | 201 ms
24,312 KB |
testcase_43 | AC | 194 ms
24,336 KB |
testcase_44 | AC | 200 ms
23,628 KB |
testcase_45 | AC | 229 ms
23,412 KB |
testcase_46 | AC | 202 ms
23,388 KB |
testcase_47 | AC | 201 ms
23,364 KB |
testcase_48 | AC | 199 ms
23,640 KB |
testcase_49 | AC | 205 ms
23,400 KB |
ソースコード
#include <atcoder/all> #include <bits/stdc++.h> using namespace std; using namespace atcoder; using namespace chrono; typedef long long ll; typedef pair<ll, ll> P; typedef vector<int> vi; typedef vector<ll> vll; typedef vector<P> vP; typedef vector<string> vs; typedef vector<vi> vvi; #define rep(i, l, n) for (ll i = (ll)(l); i < (ll)(n); i++) #define repd(i, n, l) for (ll i = (ll)(n); i > (ll)(l); i--) #define Copy(from, to) copy(from.begin(), from.end(), to.begin()) #define Sort(a) sort(a.begin(), a.end()) #define gSort(a) sort(a.begin(), a.end(), greater()) #define Unique(a) sort(a.begin(), a.end()) template <class T, class S> inline bool chmax(T &a, const S &b) { return (a < b ? a = b, 1 : 0); } template <class T, class S> inline bool chmin(T &a, const S &b) { return (a > b ? a = b, 1 : 0); } #define dPQ priority_queue<ll, vll, greater<ll>> #define PQ priority_queue<ll, vll> #define INF INT_MAX #define INFF (9223372036854775800) #define TIME_LIMIT (1.5) #define def (201010) // #define MOD (1000000007) #define MOD (998244353) #define PI (3.14159265359) ll N, T; vll A, B, C, D; // ll calc_gain(map<P, int> &highway) { // ll ret = 0; // rep(i, 0, N) { // vvi dp(14, vi(14, 0)); // ll from = B[i] <= D[i] ? A[i] * 14 + B[i] : C[i] * 14 + D[i]; // ll to = B[i] > D[i] ? A[i] * 14 + B[i] : C[i] * 14 + D[i]; // // 左上→右下 // if (from / 14 < to / 14) { // rep(h, from / 14, to / 14 + 1) { // rep(w, from % 14, to % 14 + 1) { // if (h == from / 14 && w == from % 14) // continue; // ll mi = min(h * 14 + w - 1, h * 14 + w); // ll ma = max(h * 14 + w - 1, h * 14 + w); // if (w != 0) // chmax(dp[h][w], dp[h][w - 1] + highway[{mi, ma}]); // mi = min((h - 1) * 14 + w, h * 14 + w); // ma = max((h - 1) * 14 + w, h * 14 + w); // if (h != 0) // chmax(dp[h][w], dp[h - 1][w] + highway[{mi, ma}]); // } // } // } // // 左下→右上 // else { // repd(h, from / 14, to / 14 - 1) { // rep(w, from % 14, to % 14 + 1) { // if (h == from / 14 && w == from % 14) // continue; // ll mi = min(h * 14 + w - 1, h * 14 + w); // ll ma = max(h * 14 + w - 1, h * 14 + w); // if (w != 0) // chmax(dp[h][w], dp[h][w - 1] + highway[{mi, ma}]); // mi = min((h + 1) * 14 + w, h * 14 + w); // ma = max((h + 1) * 14 + w, h * 14 + w); // if (h != 13) // chmax(dp[h][w], dp[h + 1][w] + highway[{mi, ma}]); // } // } // } // ret += 60 * dp[to / 14][to % 14]; // } // // cout << ret / 60 << endl; // return ret; // } ll calc_gain(map<P, int> &highway) { ll ret = 0; rep(i, 0, N) { auto ite = highway.begin(); while (ite != highway.end()) { if (ite->second == 0) { highway.erase(ite++); continue; } ll mih = min(ite->first.first / 14, ite->first.second / 14); ll mah = max(ite->first.first / 14, ite->first.second / 14); ll miw = min(ite->first.first % 14, ite->first.second % 14); ll maw = max(ite->first.first % 14, ite->first.second % 14); if (min(A[i], C[i]) <= mih && mah <= max(A[i], C[i]) && min(B[i], D[i]) <= miw && maw <= max(B[i], D[i])) ret += 60; ite++; } } return ret; } double ela_times(system_clock::time_point &clock) { return duration_cast<microseconds>(system_clock::now() - clock).count() * 1e-6; } int main() { auto startClock = system_clock::now(); cin >> N >> T; rep(i, 0, N) A.resize(N), B.resize(N), C.resize(N), D.resize(N); rep(i, 0, N) cin >> A[i] >> B[i] >> C[i] >> D[i]; rep(i, 0, N) A[i]--, B[i]--, C[i]--, D[i]--; map<P, int> highway; int flag = 3; // ll u = 1000000, v = 1; rep(i, 0, T) { ll u, v; cin >> u >> v; if (u == -1 && v == -1) return 0; // 初めは協力者 if (v <= 24) { cout << 2 << endl; v++; continue; } // 足りない場合は資金集め if (u < (ll)(1e7 / (long double)sqrt(v))) { cout << 3 << endl; u += 50000; continue; } if (flag && ela_times(startClock) < TIME_LIMIT) { P best_way = {-1, -1}; ll best_score = (ll)(1e7 / (long double)sqrt(v)); ll unit_gain = calc_gain(highway); rep(from, 0, 14 * 14 - 1) { rep(dir, 0, 2) { ll to = from; if (dir == 0) { if (to % 14 != 13) to++; else continue; } if (dir == 1) { if (to / 14 != 13) to += 14; else continue; } if (highway[{from, to}] == 1) continue; // cout << "a" << from / 14 << " " << from % 14 << " -> " << to / 14 // << " " // << to % 14 << " "; highway[{from, to}] = 1; ll predict_unit_gain = calc_gain(highway); // cout << predict_unit_gain << endl; if (best_score < (predict_unit_gain - unit_gain) * (T - i)) { best_score = (predict_unit_gain - unit_gain) * (T - i); best_way = {from, to}; } highway.erase({from, to}); } } if (best_way.first != -1) { highway[best_way] = 1; cout << 1 << " " << best_way.first / 14 + 1 << " " << best_way.first % 14 + 1 << " " << best_way.second / 14 + 1 << " " << best_way.second % 14 + 1 << endl; flag--; } else { cout << 3 << endl; u += 50000; flag = 0; } } else { cout << 3 << endl; u += 50000; continue; } } }