이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include <bits/stdc++.h>
#define FOR(i,x,n) for(int i=x; i<n; i++)
#define F0R(i,n) FOR(i,0,n)
#define ROF(i,x,n) for(int i=n-1; i>=x; i--)
#define R0F(i,n) ROF(i,0,n)
#define WTF cout << "WTF" << endl
#define IOS ios::sync_with_stdio(false); cin.tie(0);
using namespace std;
typedef long long LL;
const int MAXN = 1e6 + 1;
int n;
LL as[MAXN], bs[MAXN];
int main() {
IOS;
cin >> n;
F0R(i, n) cin >> as[i] >> bs[i];
bool changed = 1;
while (changed) {
changed = 0;
/*
cout << "NOW: ";
F0R(i, n) cout << as[i] << ' ';
cout << endl;
*/
F0R(i, n - 1) {
if (as[i] > bs[i]) {
if ((as[i] & 1) == (bs[i] & 1)) {
as[i + 1] += (as[i] - bs[i]) >> 1;
as[i] = bs[i];
changed = 1;
}
else if (bs[i]) {
as[i + 1] += ((as[i] - bs[i]) >> 1) + 1;
as[i] = bs[i] - 1;
changed = 1;
}
else {
if (as[i] > 1) changed = 1;
as[i + 1] += ((as[i] - bs[i]) >> 1);
as[i] = bs[i] + 1;
}
}
}
if (as[n - 1] > bs[n - 1]) {
if ((as[n - 1] & 1) == (bs[n - 1] & 1)) {
as[0] += (as[n - 1] - bs[n - 1]) >> 1;
as[n - 1] = bs[n - 1];
changed = 1;
}
else if (bs[n - 1]) {
as[0] += ((as[n - 1] - bs[n - 1]) >> 1) + 1;
as[n - 1] = bs[n - 1] - 1;
changed = 1;
}
else {
if (as[n - 1] > 1) changed = 1;
as[0] += ((as[n - 1] - bs[n - 1]) >> 1);
as[n - 1] = bs[n - 1] + 1;
}
}
if (!changed) break;
}
F0R(i, n) if (as[i] != bs[i]) {
cout << "No";
return 0;
}
cout << "Yes";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |