Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef pair<int, int> pii;
- const int MAXN = 1e5 + 7;
- vector<pii> v;
- int dp[MAXN][8][3];
- int val[8];
- int s, t;
- int solve(int on, int day, int flag, int sentido) {
- if (on == t) {
- if (!flag) return 0;
- return v[on].first + val[day] * v[on].second;
- }
- int &ans = dp[on][day][flag];
- if (~ans) return ans;
- int new_pos = on + sentido;
- if (new_pos < 0) new_pos += 7;
- new_pos = new_pos % 7;
- if (flag) {
- ans = max(v[on].first + val[day] * v[on].second, solve(new_pos, (day + 1) % 7, flag, sentido));
- } else {
- ans = solve(new_pos, (day + 1) % 7, flag, sentido);
- int curr = (v[on].first + val[day] * v[on].second);
- ans = max(ans, solve(new_pos, (day + 1) % 7, true, sentido) - curr);
- }
- return ans;
- }
- int main() {
- val[0] = 0;
- val[1] = 1;
- val[2] = 2;
- val[3] = 3;
- val[4] = 2;
- val[5] = 1;
- val[6] = 0;
- int n;
- cin >> n;
- for (int i = 0; i < n; i++) {
- int x, y;
- cin >> x >> y;
- v.push_back(pii(x, y));
- }
- int q;
- cin >> q;
- while (q--) {
- cin >> s >> t;
- s--; t--;
- memset(dp, -1, sizeof(dp));
- if (s < t) {
- cout << solve(s, 0, 0, +1) << '\n';
- } else {
- cout << solve(s, 0, 0, -1) << '\n';
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement