Codeforces Round #818 (Div. 2) C Madoka and Formal Statement
Madoka and Formal Statement
思维
如果合法,说明 \(a_i \le b_i\),因此也可以认为 \(b_i\) 就是 \(a_i\) 最后能变成的最大值
根据题意操作,只有 \(a_i \le a_{i+1}\) 的情况,才能使 \(a_i + 1\),因此 \(a_i\) 的理论最大值应该是 \(b_{i+1} + 1\)
因此只要所有的 \(b_i\) 都不大于 \(a_i\) 的理论最大值,则成立
注意特判 \(a_i > b_i\) 的情况
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <string>
#include <queue>
#include <functional>
#include <map>
#include <set>
#include <cmath>
#include <cstring>
#include <deque>
#include <stack>
#include <ctime>
#include <cstdlib>
using namespace std;
typedef long long ll;
#define pii pair<int, int>
const ll maxn = 2e5 + 10;
const ll inf = 1e17 + 10;
ll a[maxn], b[maxn];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while(t--)
{
int n;
cin >> n;
for(int i=0; i<n; i++) cin >> a[i];
for(int i=0; i<n; i++) cin >> b[i];
int f = 1;
for(int i=0; i<n; i++)
{
int pre = i - 1, nex = i + 1;
if(nex >= n) nex = 0;
if(a[i] == b[i]) continue;
if(b[i] < a[i]) f = 0;
if(b[nex] + 1 >= b[i]) continue;
f = 0;
}
if(f) cout << "YES\n";
else cout << "NO\n";
}
cout << endl;
return 0;
}