#include <iostream>
#include<vector>
#include<algorithm>
#include<math.h>
#define int long long
using namespace std;
bool p(int x, int n, vector<int> a, vector<int> b, vector<int>& c, vector<int> oa) {
a[n - 1] -= 2ll * x, a[0] += x, c[n - 1] = 2ll * x;
for (int i = n - 2; i >= 0; --i) {
a[i] -= (2 * (b[i + 1] - a[i + 1])), c[i] = (2 * (b[i + 1] - a[i + 1]));
if (abs(a[i]) >= pow(10l, 16ll)) return 0;
}
if (a[0] > b[0]) return 1; if (a[0] < b[0]) return 0;
if (*(min_element(c.begin(), c.end())) < 0) return 1;
for (int i = 0; i < (100 * n); ++i) {
if (oa[(i % n)] >= c[(i % n)]) { cout << "Yes"; exit(0); }
oa[(i + 1) % n] += (min(oa[(i % n)], c[(i % n)]) / 2);
oa[(i % n)] -= ((min(oa[(i % n)], c[(i % n)]) / 2) * 2);
}
if (oa[0] >= c[0]) { cout << "Yes"; exit(0); }
for (int i = 0; i < n; ++i) if (oa[i] != b[i]) return 0;
cout << "Yes"; exit(0);
}
int32_t main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int n; cin >> n;
vector<int> a(n), b(n), c(n, 0);
for (int i = 0; i < n; ++i)
cin >> a[i] >> b[i];
int s = 0, e = 1e15;
while (s <= e) {
int x = (s + e) / 2;
if (p(x, n, a, b, c, a)) s = x + 1;
else e = x - 1;
}
cout << "No";
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |