Submission #624510

#TimeUsernameProblemLanguageResultExecution timeMemory
624510maomao90Bodyguard (JOI21_bodyguard)C++17
0 / 100
2883 ms2097152 KiB
// Hallelujah, praise the one who set me free // Hallelujah, death has lost its grip on me // You have broken every chain, There's salvation in your name // Jesus Christ, my living hope #include <bits/stdc++.h> using namespace std; #define REP(i, s, e) for (int i = (s); i < (e); i++) #define RREP(i, s, e) for (int i = (s); i >= (e); i--) template <class T> inline bool mnto(T& a, T b) {return a > b ? a = b, 1 : 0;} template <class T> inline bool mxto(T& a, T b) {return a < b ? a = b, 1: 0;} typedef long long ll; typedef long double ld; #define FI first #define SE second typedef pair<int, int> ii; typedef pair<ll, ll> pll; typedef tuple<ll, ll, ll> iii; #define ALL(_a) _a.begin(), _a.end() #define SZ(_a) (int) _a.size() #define pb push_back typedef vector<int> vi; typedef vector<ll> vll; typedef vector<ii> vii; typedef vector<iii> viii; #ifndef DEBUG #define cerr if (0) cerr #endif const int INF = 1000000005; const ll LINF = 1000000000000000005ll; const int MAXN = 3005; const int MAXQ = 3000005; int n, q; viii adj[MAXN * 2][MAXN]; ll dist[MAXN * 2][MAXN]; ll dfs(int t, int x) { if (dist[t][x] != -1) { return dist[t][x]; } //cerr << t << ' ' << x << '\n'; dist[t][x] = 0; for (auto [nt, nx, w] : adj[t][x]) { mxto(dist[t][x], dfs(nt, nx) + w); } return dist[t][x]; } int main() { #ifndef DEBUG ios::sync_with_stdio(0), cin.tie(0); #endif cin >> n >> q; REP (i, 0, n) { ll t, a, b, c; cin >> t >> a >> b >> c; if (a < b) { REP (i, 0, b - a) { adj[t + i][a + i].pb({t + i + 1, a + i + 1, c}); adj[t + i][a + i].pb({t + i + 1, a + i, c / 2}); } } else { REP (i, 0, a - b) { adj[t + i][a - i].pb({t + i + 1, a - i - 1, c}); adj[t + i][a - i].pb({t + i + 1, a - i, c / 2}); } } } REP (i, 0, MAXN * 2 - 1) { REP (j, 0, MAXN) { if (j + 1 < MAXN) { adj[i][j].pb({i + 1, j + 1, 0}); } adj[i][j].pb({i + 1, j, 0}); if (j) { adj[i][j].pb({i + 1, j - 1, 0}); } } } memset(dist, -1, sizeof dist); REP (i, 0, q) { int t, x; cin >> t >> x; cout << dfs(t, x) << '\n'; } return 0; } /* 2 2 1 2 1 4 3 1 3 2 1 2 3 3 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...