题目翻译

我们有一个长度为 $n$ 的数组,操作若干次以下操作,能否使数组总和不会变小,能的话请输出数组。

  • 找到 $a_i$ 和 $a_j$ 且 $i\neq j$。
  • $a_i = a_j = \left|a_i-a_j\right|$。

题目思路

不会变小,我们尽可能保证是相等,因为 $a_i\leq10^9$。

那么 $\left|a_i-a_j\right|\times2=a_i+a_j$。

那么很容易想到了,$a_i$ 与 $a_j$ 是 $3$ 倍的关系。

我们只要判断,多少个 $3$ 相乘 $\leq10^9$。

那么应该是 $3^{18}=387420489$。

再加上开始的 $1$,所以数组有 $19$ 位,$n\leq19$ 是 YES ,否则是 NO

题目代码

//我这边是打表找出所有数的,也可以把这些数据在程序中算出来。
ll a[]={1,3,9,27,81,243,729,2187,6561,19683,59049,177147,531441,1594323,4782969,14348907,43046721,129140163,387420489};
void solve()
{
    int n;
    cin>>n;
    if(n<=19)
    {
        puts("YES");
        for(int i=1;i<=n;i++)
        {
            cout<<a[i-1]<<" ";
        }
        cout<<endl;
    }
    else
    {
        puts("NO");
    }
}
最后修改:2023 年 04 月 22 日
v我50吃疯狂星期四