P11643 【MX-X8-T2】「TAOI-3」终有一天,飞向水平线的彼方 题解
upd on 2025.2.5:优化了语言。
思路
先给出这道题的万能策略:
每次操作的选段长度固定为
这样一来,依次遍历
注意由于操作后
如果最后,
以样例 1 为例,其变化过程为:
2 4 4 3 3
2 2 2 3 3
2 2 3 4 3
2 2 3 2 1
证明为什么本策略无法得出解,就一定无解。
假如本策略无解,然而有其它的方法使得有解,那么这个有解的方法一定使用了长度大于
证明:
首先,对于长度任意的一次操作
然后令
可以得出
然后可以发现
进而可以发现,
那么如果
对
发现
证毕。
AC 代码
#include<bits/stdc++.h>
using namespace std;
long long t;
long long n;
long long a[100050],b[100050];
int main(){
scanf("%lld",&t);
while(t--){
scanf("%lld",&n);
memset(a,0,sizeof(long long)*(n+10));
memset(b,0,sizeof(long long)*(n+10));
for(long long i = 1; i <= n; i++){
scanf("%lld",&a[i]);
}
for(long long i = 1; i <= n; i++){
scanf("%lld",&b[i]);
}
if(n == 1){
puts("No");
continue;
}
for(long long i = 1; i < n; i++){
static long long tp;
tp = b[i]-a[i];
a[i] += tp;
a[i+1] += tp;
}
if(a[n] == b[n]){
puts("Yes");
}else{
puts("No");
}
}
return 0;
}