結果
問題 | No.5017 Tool-assisted Shooting |
ユーザー |
![]() |
提出日時 | 2023-07-16 15:09:07 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 42 ms / 2,000 ms |
コード長 | 3,525 bytes |
コンパイル時間 | 3,435 ms |
コンパイル使用メモリ | 190,172 KB |
実行使用メモリ | 24,408 KB |
スコア | 391 |
平均クエリ数 | 70.85 |
最終ジャッジ日時 | 2023-07-16 15:09:20 |
合計ジャッジ時間 | 11,012 ms |
ジャッジサーバーID (参考情報) |
judge11 / judge15 |
純コード判定しない問題か言語 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 100 |
ソースコード
#include <algorithm>#include <bitset>#include <complex>#include <cassert>#include <deque>#include <exception>#include <fstream>#include <functional>#include <iomanip>#include <ios>#include <iosfwd>#include <iostream>#include <istream>#include <iterator>#include <limits>#include <list>#include <locale>#include <map>#include <memory>#include <math.h>#include <new>#include <numeric>#include <ostream>#include <queue>#include <set>#include <sstream>#include <stack>#include <stdexcept>#include <streambuf>#include <string>#include <typeinfo>#include <utility>#include <valarray>#include <vector>#include<regex>#include<atcoder/all>using namespace std;using ll = long long;using Graph = vector<vector<int>>;#define rep(i,x) for(ll i=0;i<(ll)(x);i++)#define rrep(i,x) for(ll i=1;i<=(ll)(x);i++)#define all(v) v.begin(),v.end()typedef pair<int, int> pii;ll mod998 = 998244353;ll mod109 = 1e9 + 7;//vector<vector<int>> a(n,vector<int>(n));using mint = atcoder::modint998244353;//必要なパラメータint my_level = 1;int my_now = 12;int point = 0;int sum = 0;//盤面情報int h = 60;int w = 25;//power[i][j]…i,jにいる敵の現在の耐久力とパワー(first...耐久力 second...パワー)vector<vector<pii>> power(h, vector<pii>(w));//aim...各列で一番下方にあるやつvector<pair<int,pii>> aim(25);//string ans...i文字目はi回目の動作string ans = "";//盤面の更新void reload(int n) {for (int i = 1; i < 60; i++) {for (int j = 0; j < 25; j++) {power[i - 1][j] = power[i][j];power[i][j] = { 0,0 };}}for (int i = 0; i < n; i++) {int t, p, x;cin >> t >> p >> x;power[59][x] = { t,p };}for (int j = 0; j < 25; j++) {aim[j] = { 0,{0,0} };for (int i = 0; i < 60; i++) {if (power[i][j] != make_pair(0, 0)) {aim[j] = { j,power[i][j] };break;}}}my_level = 1 + (sum / 100);}void destination() {int ret = 1e9;int x=0, y=0;for (int j = 0; j < 25; j++) {int resist = aim[j].second.first;if (abs(my_now - j) + (resist + my_level) / my_level < aim[j].first)continue;int k = abs(my_now - j) + (resist+my_level)/my_level;if (ret > k) {x = my_now - j;y = (resist + my_level) / my_level;}}if (x > 0) {for (int i = 0; i < x; i++) {ans += 'R';}}else if (x < 0) {for (int i = 0; i < -x; i++) {ans += 'L';}}for (int i = 0; i < y; i++) {ans += 'S';}}void sum_reload() {aim[my_now].second.first -= my_level;if (aim[my_now].second.first <= 0) {sum += aim[my_now].second.second;}}int main() {for (int i = 0; i < 1000; i++) {int n;cin >> n;if (n == -1) {return 0;}reload(n);char c = 0;if (ans.size() >= i + 1) {c = ans[i];}else {destination();if (ans.size() >= i + 1) {c = ans[i];}else {ans = ans + 'S';c = 'S';}}if (c == 'L')my_now=(my_now-1+25)%25;else if (c == 'R')my_now = (my_now + 1 + 25) % 25;cout << c << endl;}}