結果
問題 | No.5017 Tool-assisted Shooting |
ユーザー | matsup10 |
提出日時 | 2023-07-16 21:34:54 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 67 ms / 2,000 ms |
コード長 | 4,788 bytes |
コンパイル時間 | 8,932 ms |
コンパイル使用メモリ | 329,428 KB |
実行使用メモリ | 24,252 KB |
スコア | 300,496 |
平均クエリ数 | 293.29 |
最終ジャッジ日時 | 2023-07-16 21:35:15 |
合計ジャッジ時間 | 16,728 ms |
ジャッジサーバーID (参考情報) |
judge15 / judge12 |
純コード判定しない問題か言語 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 30 ms
23,400 KB |
testcase_01 | AC | 36 ms
23,640 KB |
testcase_02 | AC | 31 ms
23,892 KB |
testcase_03 | AC | 30 ms
23,424 KB |
testcase_04 | AC | 33 ms
23,556 KB |
testcase_05 | AC | 36 ms
24,180 KB |
testcase_06 | AC | 64 ms
23,808 KB |
testcase_07 | AC | 30 ms
23,868 KB |
testcase_08 | AC | 37 ms
23,388 KB |
testcase_09 | AC | 32 ms
23,412 KB |
testcase_10 | AC | 34 ms
23,340 KB |
testcase_11 | AC | 36 ms
23,616 KB |
testcase_12 | AC | 32 ms
24,240 KB |
testcase_13 | AC | 42 ms
23,628 KB |
testcase_14 | AC | 43 ms
23,664 KB |
testcase_15 | AC | 39 ms
23,400 KB |
testcase_16 | AC | 37 ms
23,628 KB |
testcase_17 | AC | 38 ms
23,400 KB |
testcase_18 | AC | 50 ms
24,108 KB |
testcase_19 | AC | 41 ms
24,252 KB |
testcase_20 | AC | 38 ms
23,880 KB |
testcase_21 | AC | 35 ms
24,108 KB |
testcase_22 | AC | 36 ms
23,856 KB |
testcase_23 | AC | 64 ms
24,240 KB |
testcase_24 | AC | 40 ms
23,868 KB |
testcase_25 | AC | 64 ms
23,352 KB |
testcase_26 | AC | 33 ms
23,448 KB |
testcase_27 | AC | 67 ms
23,352 KB |
testcase_28 | AC | 34 ms
23,628 KB |
testcase_29 | AC | 30 ms
23,508 KB |
testcase_30 | AC | 64 ms
23,556 KB |
testcase_31 | AC | 29 ms
24,060 KB |
testcase_32 | AC | 40 ms
23,508 KB |
testcase_33 | AC | 31 ms
23,676 KB |
testcase_34 | AC | 31 ms
23,256 KB |
testcase_35 | AC | 37 ms
23,688 KB |
testcase_36 | AC | 34 ms
23,352 KB |
testcase_37 | AC | 31 ms
24,168 KB |
testcase_38 | AC | 30 ms
23,916 KB |
testcase_39 | AC | 29 ms
23,400 KB |
testcase_40 | AC | 55 ms
23,856 KB |
testcase_41 | AC | 43 ms
24,156 KB |
testcase_42 | AC | 34 ms
23,580 KB |
testcase_43 | AC | 44 ms
23,400 KB |
testcase_44 | AC | 38 ms
23,580 KB |
testcase_45 | AC | 29 ms
23,400 KB |
testcase_46 | AC | 29 ms
23,580 KB |
testcase_47 | AC | 33 ms
23,508 KB |
testcase_48 | AC | 33 ms
23,616 KB |
testcase_49 | AC | 64 ms
23,820 KB |
testcase_50 | AC | 29 ms
23,664 KB |
testcase_51 | AC | 34 ms
23,352 KB |
testcase_52 | AC | 31 ms
24,252 KB |
testcase_53 | AC | 30 ms
23,604 KB |
testcase_54 | AC | 42 ms
23,652 KB |
testcase_55 | AC | 29 ms
24,180 KB |
testcase_56 | AC | 36 ms
23,640 KB |
testcase_57 | AC | 63 ms
23,652 KB |
testcase_58 | AC | 29 ms
23,352 KB |
testcase_59 | AC | 29 ms
24,036 KB |
testcase_60 | AC | 30 ms
24,096 KB |
testcase_61 | AC | 44 ms
24,048 KB |
testcase_62 | AC | 38 ms
24,012 KB |
testcase_63 | AC | 35 ms
23,556 KB |
testcase_64 | AC | 36 ms
23,832 KB |
testcase_65 | AC | 39 ms
23,652 KB |
testcase_66 | AC | 33 ms
24,060 KB |
testcase_67 | AC | 48 ms
23,856 KB |
testcase_68 | AC | 46 ms
23,352 KB |
testcase_69 | AC | 56 ms
24,036 KB |
testcase_70 | AC | 37 ms
23,544 KB |
testcase_71 | AC | 43 ms
23,388 KB |
testcase_72 | AC | 31 ms
24,180 KB |
testcase_73 | AC | 35 ms
24,048 KB |
testcase_74 | AC | 31 ms
23,436 KB |
testcase_75 | AC | 34 ms
23,904 KB |
testcase_76 | AC | 64 ms
23,868 KB |
testcase_77 | AC | 41 ms
23,448 KB |
testcase_78 | AC | 36 ms
23,616 KB |
testcase_79 | AC | 31 ms
23,388 KB |
testcase_80 | AC | 43 ms
23,916 KB |
testcase_81 | AC | 29 ms
24,060 KB |
testcase_82 | AC | 43 ms
23,340 KB |
testcase_83 | AC | 29 ms
23,940 KB |
testcase_84 | AC | 64 ms
23,580 KB |
testcase_85 | AC | 29 ms
23,820 KB |
testcase_86 | AC | 43 ms
23,508 KB |
testcase_87 | AC | 35 ms
23,640 KB |
testcase_88 | AC | 39 ms
23,400 KB |
testcase_89 | AC | 35 ms
23,808 KB |
testcase_90 | AC | 29 ms
23,388 KB |
testcase_91 | AC | 33 ms
23,508 KB |
testcase_92 | AC | 43 ms
23,508 KB |
testcase_93 | AC | 43 ms
23,604 KB |
testcase_94 | AC | 36 ms
23,364 KB |
testcase_95 | AC | 30 ms
23,856 KB |
testcase_96 | AC | 36 ms
23,352 KB |
testcase_97 | AC | 39 ms
24,192 KB |
testcase_98 | AC | 64 ms
23,628 KB |
testcase_99 | AC | 41 ms
23,604 KB |
ソースコード
#include <bits/extc++.h> #include <atcoder/all> using namespace std; using ll = long long; #define REP(i,n) for(int i=0;i<int(n);i++) #define FOR(i,a,b) for(int i=a;i<=int(b);i++) #define ALL(x) x.begin(),x.end() #define INF INT_MAX #define INFL LLONG_MAX / 4 using namespace atcoder; using mint = modint998244353; template<typename T> void chmin(T& a, T b) { a = min(a, b); } template<typename T> void chmax(T& a, T b) { a = max(a, b); } #define PR(x) cerr << #x << "=" << x << endl using i128 = __int128_t; int main_proc() { // h, p int score = 0; vector f(1100, vector<pair<int, int>>(25)); vector f_(1100, vector<pair<int, int>>(25)); vector<queue<int>> opp_ys(25); int new_opp_y = 59; int pow_sum = 0; int pos_x = 12; auto get_lv = [&]() { return 1 + pow_sum / 100; }; auto valid = [&](int pos_y, char to) -> bool { if(to == 'L') { return f[pos_y+1][(pos_x+24)%25].first == 0 && f[pos_y][(pos_x+24)%25].first == 0; } else if(to == 'R') { // PR(f[pos_y+2][(pos_x+1)%25].first); return f[pos_y+1][(pos_x+1)%25].first == 0 && f[pos_y][(pos_x+1)%25].first == 0; } else { // PR(f[pos_y+1][pos_x].first); return f[pos_y+1][pos_x].first == 0; } }; REP(pos_y, 1000) { // PR(pos_y); int n; cin >> n; if(n == -1) return 0; REP(i, n) { int h, p, x; cin >> h >> p >> x; f[new_opp_y][x] = {h, p}; f_[new_opp_y][x] = {h, p}; opp_ys[x].push(new_opp_y); } new_opp_y++; vector<int> min_reach_turns(25, 1000); min_reach_turns[pos_x] = 1; REP(pm, 2){ int now_pos_y = pos_y; FOR(i, 1, 24) { int offset = pm ? i : 25-i; int new_pos_x = (pos_x + offset) % 25; now_pos_y++; // PR(now_pos_y); // PR(new_pos_x); while(f[now_pos_y][new_pos_x].first && f[now_pos_y+1][new_pos_x].first) { now_pos_y++; } chmin(min_reach_turns[new_pos_x], now_pos_y - pos_y); } } int min_req_turn = 1000; char next_to = 'S'; REP(x, 25) { if(opp_ys[x].empty()) continue; int now_opp_y = opp_ys[x].front(); int req_turn = f[now_opp_y][x].first / get_lv() + min_reach_turns[x] - 1; if(req_turn + pos_y >= now_opp_y) continue; if(min_req_turn > req_turn) { if(pos_x == x) { next_to = 'S'; } if(abs(pos_x - x) < 13) { if(pos_x < x) next_to = 'R'; if(pos_x > x) next_to = 'L'; } else { if(pos_x < x) next_to = 'L'; if(pos_x > x) next_to = 'R'; } min_req_turn = req_turn; } } if(valid(pos_y, next_to)) { // PR(pos_y); // PR(pos_x); if(next_to == 'L') pos_x = (pos_x + 24) % 25; if(next_to == 'R') pos_x = (pos_x + 1) % 25; } else if (valid(pos_y, 'S')) { next_to = 'S'; // PR(pos_y); // PR(pos_x); // PR(min_req_turn); } else if (valid(pos_y, 'R')) { pos_x = (pos_x + 1) % 25; next_to = 'R'; } else { pos_x = (pos_x + 24) % 25; next_to = 'L'; } // if(pos_y > 100) break; if(opp_ys[pos_x].size()) { f[opp_ys[pos_x].front()][pos_x].first-=get_lv(); if(f[opp_ys[pos_x].front()][pos_x].first <= 0) { score += f_[opp_ys[pos_x].front()][pos_x].first; pow_sum += f[opp_ys[pos_x].front()][pos_x].second; f[opp_ys[pos_x].front()][pos_x] = {0, 0}; opp_ys[pos_x].pop(); } } REP(i, 25) { if(opp_ys[i].front() == pos_y) opp_ys[i].pop(); } cout << next_to << endl; } PR(score); return 0; } void test1(int dn) { string fn = "/Users/tm/Desktop/atcoder/yukicoder/yukicoder_9774/yukicoder_9774/tools/in/00"; if(dn<10) fn += '0'; fn += to_string(dn); fn += ".txt"; ifstream in(fn); cin.rdbuf(in.rdbuf()); string fno = "/Users/tm/Desktop/atcoder/yukicoder/yukicoder_9774/yukicoder_9774/Visualizer_for_Mac/input.txt"; ofstream out(fno); std::streambuf* strbuf = cout.rdbuf(out.rdbuf()); REP(i, 10000) { if (cin.fail()) break; int s; if(i < 25) { cin >> s; cout << s << ' '; } else { if(i == 25) cout << endl; cin >> s; cout << s << endl; REP(j, s) { REP(k, 3) { int x; cin >> x; cout << x << ' '; } cout << endl; } } } in = ifstream(fn); cin.rdbuf(in.rdbuf()); fno = "/Users/tm/Desktop/atcoder/yukicoder/yukicoder_9774/yukicoder_9774/Visualizer_for_Mac/output.txt"; out = ofstream(fno); vector<int> p(25); REP(i, 25) cin >> p[i]; main_proc(); std::cout.rdbuf(strbuf); return; } void test() { REP(i, 10) test1(i); } int main() { // test1(13); main_proc(); return 0; }