• CF 1708A/数学思维


    CF1708A

    A. Difference Operations
    time limit per test1 second
    memory limit per test256 megabytes
    inputstandard input
    outputstandard output
    You are given an array a
    consisting of n
    positive integers.

    You are allowed to perform this operation any number of times (possibly, zero):

    choose an index i (2≤i≤n), and change ai to a[i]−a[i−1].Is it possible to make a[i]=0 for all 2≤i≤n?

    Input
    The input consists of multiple test cases. The first line contains a single integer t (1≤t≤100) — the number of test cases. The description of the test cases follows.

    The first line contains one integer n (2≤n≤100) — the length of array a.The second line contains n integers a1,a2,…,an (1≤ai≤109).

    Output
    For each test case, print “YES” (without quotes), if it is possible to change ai
    to 0 for all 2≤i≤n, and “NO” (without quotes) otherwise.

    You can print letters in any case (upper or lower).

    Example
    inputCopy
    4
    2
    5 10
    3
    1 2 3
    4
    1 1 1 1
    9
    9 9 8 2 4 4 3 5 3

    outputCopy
    YES
    YES
    YES
    NO

    Note
    In the first test case, the initial array is [5,10].
    You can perform 2 operations to reach the goal:

    Choose i=2, and the array becomes [5,5].
    Choose i=2, and the array becomes [5,0].
    In the second test case, the initial array is [1,2,3].
    You can perform 4 operations to reach the goal:

    Choose i=3, and the array becomes [1,2,1].
    Choose i=2, and the array becomes [1,1,1].
    Choose i=3, and the array becomes [1,1,0].
    Choose i=2, and the array becomes [1,0,0].

    In the third test case, you can choose indices in the order 4, 3, 2.

    数学思维

    给一个数组,首先a[1]要变成0,一定要是a[0]的倍数,然后a[2]要变成0,要是a[1]以及a[1]中间可变成的值的倍数,如果到了a[2],则说明a[1]以及a[1]中间可变成的值肯定都是a[0]的倍数,所以a[2]要变成0就也必须要是a[0]的倍数,依次类推,a[0]是0要额外考虑。

    #include
    using namespace std;
    int main()
    {
        int t;
        cin>>t;
        for(int i=0;i<t;i++)
        {
            int n;
            cin>>n;
            int a[105]={0};
            bool flag=1;
            for(int j=0;j<n;j++) cin>>a[j];
            if(a[0]==0)
            {
                for(int j=1;j<n;j++)
                {
                    if(a[j]!=0)
                    {
                        flag=0;
                        break;
                    }
                }
            }
            else
            {
                for(int j=1;j<n;j++)
                {
                    if(a[j]%a[0])
                    {
                        flag=0;
                        break;
                    }
                }
            }
            (flag)?cout<<"YES"<<endl:cout<<"NO"<<endl;
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
  • 相关阅读:
    中科大计网学习记录笔记(十二):TCP 套接字编程
    解读数仓中的数据对象及相关关系
    SpringCloud -- Nacos配置管理
    Python学习 -- datetime模块
    JVM 面试速记
    【黄啊码】MySQL入门—9、什么?都2022了,还不知道什么是事务?
    git-使用操作流程
    MongoDB 对索引的创建查询修改删除 附代码
    Ag44团簇以及衍生团簇(直径1-2nm)
    mysql面试题5:索引、主键、唯一索引、联合索引的区别?什么情况下设置了索引但无法使用?并且举例说明
  • 原文地址:https://blog.csdn.net/m0_74053777/article/details/133970912