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;
}

你可能感兴趣的:(c++)