Codeforces Round #885(Div. 2)C

C. 维卡和价格标签

每个测试的时间限制为1秒
每个测试的内存限制为256兆字节
输入:标准输入
输出:标准输出

维卡来到她最喜欢的化妆品店"Golden Pear"。她注意到n个物品的价格自她上次光顾以来发生了变化。

她决定分析价格的变化,并计算每个物品的旧价格和新价格之间的差异。

维卡喜欢计算价格差异,并决定继续这个过程。

假设旧价格表示为非负整数数组a,新价格表示为非负整数数组b。这两个数组具有相同的长度n。

在一个操作中,维卡根据以下原则构建一个新的数组c:ci=|ai−bi|。然后,数组c重命名为数组b,数组b重命名为数组a,之后维卡用它们再次执行这个操作。

例如,如果a=[1,2,3,4,5,6,7];b=[7,6,5,4,3,2,1],那么c=[6,4,2,0,2,4,6]。然后,a=[7,6,5,4,3,2,1];b=[6,4,2,0,2,4,6]。

维卡决定称数组a和b为无聊的一对数组,如果经过一些操作后数组a的所有元素变为零。

如果原始的数组对是无聊的,请输出"YES",否则输出"NO"。

输入
每个测试由多个测试用例组成。第一行包含一个整数t(1≤t≤104)- 测试用例的数量。接下来是各个测试用例的描述。

每个测试用例的第一行包含一个整数n(1≤n≤105)- 价格发生变化的物品数量。

每个测试用例的第二行包含n个整数a1,a2,…,an(0≤ai≤109)- 物品的旧价格。

每个测试用例的第三行包含n个整数b1,b2,…,bn(0≤bi≤109)- 物品的新价格。

保证所有测试用例中n的总和不超过105。

输出
对于每个测试用例,如果价格数组对是无聊的,请输出"YES",否则输出"NO"。

input

9
4
0 0 0 0
1 2 3 4
3
1 2 3
1 2 3
2
1 2
2 1
6
100 23 53 11 56 32
1245 31 12 6 6 6
7
1 2 3 4 5 6 7
7 6 5 4 3 2 1
3
4 0 2
4 0 2
3
2 5 2
1 3 4
2
6 1
4 2
2
0 0
0 3

output

YES
YES
NO
NO
YES
YES
NO
YES
YES

你可以以任何大小写形式输出每个字母。例如,字符串"yEs","yes","Yes"和"YES"都将被接受为肯定答案。

分析

对于一组数字如 (1,5)->(5,4)->(4,1)->(1,3)->(3,2)->(2,1)->(1,0)->(0,1)->(1,1)->(1,0)->(0,1)->(1,1)->(1,0) 由此我们可知无论哪两个数在计算一段时间后总会进入一个如上所示的循环,为了求a数组在某一时刻能否全部变为0即与其变换的次数 % 3的大小有关特别的当a=b=0无论何时都是0

还有一件事,a和b的数据范围都是1e9如果暴力求解一定会超时,所以要注意寻找规律然后就是考验数学敏感性的时候了,非常痛苦的手玩推公式过程可知以下公式

当a>2b的时候,经过3次操作后,a会变成 a-2b,b不变
当a<=2*b的时候,就可以进行暴力操作

CODE

#include<bits/stdc++.h>
using namespace std;
int cal(int a, int b) {
if(a == 0)
return 0;
if(b == 0)
return 1;
a %= 2 * b;
return (cal(b, abs(a - b)) + 1) % 3;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
vector<int> a(n),b(n);
for(auto &it :a)cin>>it;
for(auto &it :b)cin>>it;
int ans=-1;
bool ok=true;
for (int i = 0; i < n; i++) {
if (a[i] == 0 && b[i] == 0)
continue;
int res = cal(a[i], b[i]);
if (ans == -1)
ans = res;
else if (ans != res)
ok = false;
}
if(ok)puts("YES");
else puts("NO");
}
}
posted @   liuwansi  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示