CF1253A

· · 题解

CF1253A 题解

题目传送门

题目大意

给一个序列 a 的一个子序列加上一个相同的值 k ,问有没有一个 k 能使 a 序列变成 b 序列。

思路

根据题意,我们很容易就能想到将 bi ai 做差,得出 ci ,遍历 ci 寻找是否有且只有一个不为零的子序列值相同,如果值不同或出现两个以上不为零的子序列,则输出 'No' ,反之则输出 'Yes'。当然这也可以更简单,删去 c 序列,直接在作差实现上述功能。

不废话,直接上代码:

#include<bits/stdc++.h>
using namespace std;
int t,n,a[100001],b[100001];
int main(){
    cin >> t;
    while(t--){
        cin >> n;
        for(int i=1;i<=n;i++) cin >> a[i];
        int ch=0;
        bool flag=1;
        for(int i=1;i<=n;i++) cin >> b[i];
        for(int i=1;i<=n;i++) {
            if((ch==0&&b[i]!=a[i])||(ch==(b[i]-a[i]))) ch=b[i]-a[i];
            else if((ch!=0&&b[i]!=a[i])||(ch<0)){
                flag=0;
                break;
            }
        }
        if(flag)
            cout << "Yes\n";
        else cout << "No\n";
    }
    return 0;
}