int STANDARD = 1; int DBG = 0; #include using namespace std; #define F0(i,n) for (int i=0; i pii; typedef long long ll; const double EPS = 1e-9; const int MOD = 998244353; #define PR(x) cerr << #x << "=" << x << endl template ostream& operator<<(ostream& os, const pair& p) { os << "(" << p.first << ", " << p.second << ")"; return os; } template ostream& operator<<(ostream& os, const tuple& p) { os << "(" << get<0>(p) << ", " << get<1>(p) << ", " << get<2>(p) << ")"; return os; } istream& operator>>(istream& is, pii& p) { is>>p.first>>p.second; return is; } template ostream& operator<<(ostream& os, const vector& v) { os << "["; F0(i,SZ(v)) { if (i>0) os << ","; os << v[i]; } os << "]"; return os; } template ostream& operator<<(ostream& os, const set& v) { os << "{"; int f=1; for(auto i:v) { if(f)f=0;else os << ","; cerr << i; } os << "}" << endl; return os; } template ostream& operator<<(ostream& os, const map& v) { os << "{"; int f=1; for(auto i:v) { if(f)f=0;else os << ", "; cerr << i.first << ":" << i.second; } os << "}" << endl; return os; } int X, turn; int n, m, S, str, score, newX; string ans; const int N = 32; const int M = 64; int P[N]; const int W = 25; const int H = 60; const int DX[]={-1,0,1,0}; const int DY[]={0,1,0,-1}; const string CS="nesw"; const string HS="URDL"; int hp[M][N], pw[M][N], ihp[M][N], f[N]; void Solve() { X = 12; str = 1; score = 0; S = 0; for (turn = 1; turn <= 1000; turn++) { cin >> n; if (n == -1) break; F0(h, H) F0(w, W) { hp[h][w] = hp[h + 1][w]; ihp[h][w] = ihp[h + 1][w]; pw[h][w] = pw[h + 1][w]; } F0(i, n) { int h, p, x; cin >> h >> p >> x; hp[H-1][x] = h; ihp[H-1][x] = h; pw[H-1][x] = p; f[x]++; } if (DBG && turn <= 187) { for (int i = 30; i >= 0; i--) { F0(j, W) if (hp[i][j]) { int d = (hp[i][j] + str - 1) / str; d = min(d, 9); cerr << d; } else cerr << "."; cerr << endl; } F0(j, W) if (j == X) cerr << "X"; else cerr << " "; cerr << endl << endl; } bool stay = false; pii t(-1, -1); if (hp[0][X] > 0) { cerr << "Dead at " << turn << endl; break; } newX = X; ans = "S"; double bv = -1.0; for (int i = 1; i < H; i++) if (hp[i][X] > 0) { if ((i) * str >= hp[i][X]) { double av = 1.0 * pw[i][X] / ((hp[i][X] + str - 1) / str - 1); if (av > bv) { bv = av; newX = X; ans = "S"; } } t = pii(i, X); break; } for (int dir = -1; dir <= 1; dir += 2) { int cX = X; F1(steps, 25) { if (hp[steps - 1][cX]) break; cX = (cX + dir + W) % W; if (hp[steps - 1][cX]) break; for (int i = steps; i < H; i++) if (hp[i][cX] > 0) { // TODO if ((i - steps + 1) * str >= hp[i][cX]) { double av = 1.0 * pw[i][cX] / (((hp[i][cX] + str - 1) / str) + steps - 2); if (av > bv) { bv = av; newX = (X + dir + W) % W; ans = dir == -1 ? "L" : "R"; } } break; } } } if (DBG) cerr << bv << " " << ans << endl; X = newX; for (int i = 1; i < H; i++) if (hp[i][X] > 0) { t = pii(i, X); hp[t.first][t.second] -= str; if (hp[t.first][t.second] <= 0) { S += pw[t.first][t.second]; score += ihp[t.first][t.second]; str = 1 + S / 100; hp[t.first][t.second] = 0; ihp[t.first][t.second] = 0; pw[t.first][t.second] = 0; } break; } cout << ans << endl; } PR(score); if (0) F0(i, W) { cerr << P[i] << " " << f[i] << endl; } } void ReadInput() { F0(i, W) cin >> P[i]; } int main(int argc, char* argv[]) { int seed1 = 0, seed2 = 0; if(argc>1) { seed1 = seed2 = atoi(argv[1]); if (argc > 2) { DBG = atoi(argv[2]); } STANDARD=0; } if(STANDARD) { Solve(); return 0; } for (int seed=seed1; seed<=seed2; seed++) { if(seed>=0 && seed<5000) { char inp[128]; sprintf(inp, "in/%04d.txt", seed); char outp[128]; sprintf(outp, "out/%04d.txt", seed); ignore = freopen(inp, "r", stdin); ignore = freopen(outp, "w", stdout); ReadInput(); //cerr << "Seed #" << seed << " "; Solve(); //cout << "Score would be " << bscore << endl; } else { // Generate throw; } } return 0; }