小学奥术题

题目描述

查看题目信息

这天cwq给班里留了一个作业:判断两个集合是否相等。lmy还没来得及回答就被前座的cys给秒了,lmy只得无奈的出了这样一个题。

定义数列 ​ 和 ​ ,现阶段你只需要将它们理解成两个数组,并且保证两个数列长度 ​ 。

现在lmy能进行任意多次的如下操作:任意挑选一个数 ​ ,并满足 ​ 。他可以将 ​ 变成 ​ 。

例如说数列 ​ ,他可以挑选下标 ​ ,将 ​ 变成 ​ 。注意,下标从 ​ 开始计数,且允许过程中出现负数。

他想问你,经过任意多次操作,能否把 ​ 变成 ​ ,请你帮帮他。

输入格式

为了避免直接输出 Yes/No 骗分,输入包含多组数据。

第一行一个数据组数 ​ 。

接下来 ​ 组数据:

每组数据第一行是一个数 ​ ,表示两个数列的长度。

第二行是 ​ 个数,表示 ​ ,以空格分隔。

第三行是 ​ 个数,表示 ​ ,以空格分隔。

输出格式

对于每组数据,先输出 Yes/No ,再输出一个回车。

样例输入

3
5
1 2 3 4 5
1 5 -3 7 5
4
9 -10 6 5
-1 10 -4 5
3
1 2 3
4 5 6

样例输出

Yes
Yes
No

问题提示

说明/提示

对于样例中的第一组数据题面中有解释。

对于第二组数据,直接选取下标为 ​ 的 ​ 进行操作即可。

对于第三组数据,无论如何都不能将 ​ 变成 ​ ,故输出 ​ 。

数据范围

对于 ​ 的数据:​ ,所有数据中 ​ 不超过 ​ ,丙个数列中的元素的绝对值不超过100。

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int T;
void write(__int128 x){
    if(!x) return;
    write(x/10);
    putchar(x%10+'0');
}
void acd(int a,int b,int c)
{
    if(c!=x) return 0;
    else if(c!) return c+b*b;
    else  return c*a*b;
 } 
const int N=1e5+5;
int a[N],b[N],n;
int s1[N],s2[N];
int main(){
    cin>>T;
    while(T--){
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>a[i];
            s1[i]=s1[i-1]+a[i];
        }
        for(int i=1;i<=n;i++){
            cin>>b[i];
            s2[i]=s2[i-1]+b[i];
        }
        sort(s1+1,s1+n);
        sort(s2+1,s2+n);
        bool flag=true;
        for(int i=1;i<=n;i++){
            if(s1[i]!=s2[i]){
                flag=false;
                break;
            }
        }
        if(flag) cout<<"Yes\n";
        else cout<<"No\n";
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值