"蔚来杯"2022牛客暑期多校训练营6 J题 签到 思维

链接:https://ac.nowcoder.com/acm/contest/33191/J
来源:牛客网

题目描述

There are three integers A,BA, BA,B and CCC written on the blackboard.

You can perform the following two operations as many times as you like:

 
1. Change BBB to A−BA-BAB.
2. Change CCC to B−CB-CBC.

Please note that each time you don't need to perform all two operations. You can choose one type of operation to perform.

You are given an integer xxx. Answer whether you can change CCC into xxx using these operations.

You need to answer TTT queries independently.
 

输入描述:

The first line contains a positive integer T(1≤T≤105)T(1\leq T\leq 10 ^ 5)T(1T105).

Each of the next TTT lines contains four integers A,B,C,x(−108≤A,B,C,x≤108)A, B, C, x(-10 ^ 8 \leq A, B, C, x \leq 10 ^ 8)A,B,C,x(108A,B,C,x108).

输出描述:

For each test case, output "Yes" if CCC can become xxx, and "No" otherwise (without quotes).
示例1

输入

复制
3 
2 4 3 1 
2 4 3 2 
4 2 2 0

输出

复制
Yes
No
Yes

说明

Please note that A,B,C,xA, B, C, xA,B,C,x could be negative.

备注:

Please note that A,B,C,xA, B, C, xA,B,C,x could be negative.

题意

看题。

分析

发现做两次 𝐵=𝐴−𝐵 等于没做,做两次 𝐶=𝐵−𝐶 等于没做,所以两个操作必然会交替的进行。
若两个操作使用次数相等,则 𝐶 可以成为的集合 𝑆={𝑥∣𝑥=𝐶+𝑘×(𝐴−2×𝐵)},若次数不等,则 𝑆={𝑥∣𝑥=𝐵−𝐶+𝑘×(𝐴−2×𝐵)}
注意特判 𝐴=2×𝐵 的情况。

 

#include <bits/stdc++.h>
using namespace std;

int main()
{
    // freopen("1.in","r",stdin);
    // freopen("1.out","w",stdout);
    int T;
    cin>>T;
    while(T--)
    {
        int a,b,c,x;
        scanf("%d%d%d%d",&a,&b,&c,&x);
        int x1=x-c,x2=x-(b-c);
        int k=a-2*b;
        int flag=0;
        if(k) flag|=(x1%k==0) || (x2%k==0);
        else flag|=(x1==0) || (x2==0);
        puts(flag?"Yes":"No");
    }
    return 0;
}

 

posted @ 2022-08-06 19:03  er007  阅读(71)  评论(0)    收藏  举报