A. Omkar and Bad Story

A. Omkar and Bad Story contest

A. Omkar and Bad Story
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
Omkar has received a message from Anton saying "Your story for problem A is confusing. Just make a formal statement." Because of this, Omkar gives you an array a=[a1,a2,,an] of n distinct integers. An array b=[b1,b2,,bk] is called nice if for any two distinct elements bi,bj of b, |bi−bj| appears in b at least once. In addition, all elements in b must be distinct. Can you add several (maybe, 0) integers to a to create a nice array b of size at most 300? If a is already nice, you don't have to add any elements.

For example, array [3,6,9] is nice, as |63|=|96|=3, which appears in the array, and |93|=6, which appears in the array, while array [4,2,0,6,9] is not nice, as |94|=5 is not present in the array.

For integers x and y, |x−y|=x−y if x>y and |x−y|=y−x otherwise.

Input
Each test contains multiple test cases. The first line contains t (1≤t≤50), the number of test cases. Description of the test cases follows.

The first line of each test case contains a single integer n (2≤n≤100) — the length of the array a.

The second line of each test case contains n distinct integers a1,a2,,an (100≤ai≤100) — the elements of the array a.

Output
For each test case, output one line containing YES if Omkar can create a nice array b by adding elements to a and NO otherwise. The case of each letter does not matter, so yEs and nO will also be accepted.

If the first line is YES, output a second line containing a single integer k (n≤k≤300).

Then output one line containing k distinct integers b1,b2,,bk (109≤bi≤109), the elements of the nice array b. b1,b2,,bk can be in any order. For each ai in a, ai must appear at least once in b.

It can be proved that if Omkar can create such an array b, then he can also do so in a way that satisfies the above constraints.

If multiple solutions exist, you can print any.

Example
inputCopy
4
3
3 0 9
2
3 4
5
-7 3 13 -2 8
4
4 8 12 6
outputCopy
yes
4
6 0 3 9
yEs
5
5 3 1 2 4
NO
Yes
6
8 12 6 2 4 10
Note
For the first case, you can add integers to a to receive the array b=[6,0,3,9]. Note that |63|=|96|=|30|=3 and 3 is in b, |60|=|93|=6 and 6 is in b, and |90|=9 is in b, so b is nice.

For the second case, you can add integers to a to receive the array b=[5,3,1,2,4]. We have that |21|=|32|=|43|=|54|=1 is in b, |31|=|42|=|53|=2 is in b, |41|=|52|=3 is in b, and |51|=4 is in b, so b is nice.

For the fourth case, you can add integers to a to receive the array b=[8,12,6,2,4,10]. We have that |42|=|64|=|86|=|108|=|1210|=2 is in b, |62|=|84|=|106|=|128|=4 is in b, |82|=|104|=|126|=6 is in b, |102|=|124|=8 is in b, and |122|=10 is in b, so b is nice.

It can be proven that for all other test cases it is impossible to create a nice array b.

暴力枚举:

#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
int a[10001];
int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        bool flag = false;
        int n;
        int k;
        cin >> n;
        set<int, greater<>> cun;
        for (int i = 0; i < n; i++)
        {
            cin >> a[i];
            cun.insert(a[i]);
            if (a[i] < 0)
                flag = true;
        }
        if (flag == true)
            cout << "NO" << endl;
        else
        {
            int k = 0;
            int h = 0;
            for (auto it : cun)
            {
                for (auto iter : cun)
                {
                    int num = abs(it - iter);
                    if (num!=0) cun.insert(num);
                }
                // k = h;
                // h = it;
                // int num = abs(k-h);
                // cun.insert(num);
            }
            if (cun.size() > 300)
                cout << "NO" << endl;
            else
            {
                cout << "YES" << endl;
                cout << cun.size() << endl;
                for (auto it : cun)
                {
                    //  if (it >= 0)
                    cout << it << " ";
                }
                cout << endl;
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值