首页 > 其他分享 >Array Destruction(枚举暴力,stl的合理选择)

Array Destruction(枚举暴力,stl的合理选择)

时间:2024-03-24 17:00:49浏览次数:28  
标签:aa elements ve stl array Array Destruction throw out

You found a useless array aa of 2n2n positive integers. You have realized that you actually don't need this array, so you decided to throw out all elements of aa.

It could have been an easy task, but it turned out that you should follow some rules:

  1. In the beginning, you select any positive integer xx.
  2. Then you do the following operation nn times:
    • select two elements of array with sum equals xx;
    • remove them from aa and replace xx with maximum of that two numbers.

For example, if initially a=[3,5,1,2]a=[3,5,1,2], you can select x=6x=6. Then you can select the second and the third elements of aa with sum 5+1=65+1=6 and throw them out. After this operation, xx equals 55 and there are two elements in array: 33 and 22. You can throw them out on the next operation.

Note, that you choose xx before the start and can't change it as you want between the operations.

Determine how should you behave to throw out all elements of aa.

Input

The first line contains a single integer tt (1≤t≤10001≤t≤1000) — the number of test cases.

The first line of each test case contains the single integer nn (1≤n≤10001≤n≤1000).

The second line of each test case contains 2n2n integers a1,a2,…,a2na1,a2,…,a2n (1≤ai≤1061≤ai≤106) — the initial array aa.

It is guaranteed that the total sum of nn over all test cases doesn't exceed 10001000.

Output

For each test case in the first line print YES if it is possible to throw out all elements of the array and NO otherwise.

If it is possible to throw out all elements, print the initial value of xx you've chosen. Print description of nn operations next. For each operation, print the pair of integers you remove.

Example

input

Copy

4
2
3 5 1 2
3
1 1 8 8 64 64
2
1 1 2 4
5
1 2 3 4 5 6 7 14 3 11

output

Copy

YES
6
1 5
2 3
NO
NO
YES
21
14 7
3 11
5 6
2 4
3 1

Note

The first test case was described in the statement.

In the second and third test cases, we can show that it is impossible to throw out all elements of array aa.

思路:

1,这题规律我找到了,但是stl没有选择对,这种情况可以让队友去写

2,multiset有find(数)返回指针,erase(指针)的操作,

代码:

int a[2200],n;
vec check(int x){
    vec ve;
    multiset<int> se;
    rep(i,1,n)se.emplace(a[i]);
    
    rep(i,1,n/2){
        auto it = se.end();--it;
        int y=x-*it;
        se.erase(it);
        auto ii=se.find(y);//set会find数,并返回指针
        if(ii==se.end())return {};//找不到,返回end()
        se.erase(ii);//删除指针
        
        ve.emplace_back(y);
        ve.emplace_back(x-y);
        x=max(y,x-y);
    }
    
    return ve;
}
void solve(){//找到规律,用合适的结构去暴力枚举
    cin>>n;
    n<<=1;
    rep(i,1,n)cin>>a[i];
    sort(a+1,a+1+n);
    rep(i,1,n-1){//遍历所有可能的初始值
        int x=a[i]+a[n];
        vec ve=check(x);
        if(ve.size()){
            cout<<"YES"<<'\n'<<x<<'\n';
            for(int i=0;i<ve.size()-1;i+=2){
                cout<<ve[i]<<' '<<ve[i+1]<<'\n';
            }
            return ;  
        }
    }cout<<"NO"<<'\n';
}

标签:aa,elements,ve,stl,array,Array,Destruction,throw,out
From: https://blog.csdn.net/m0_63054077/article/details/125897626

相关文章

  • C++ 的标准模板库(STL)常用容器介绍
    C++的标准模板库(STL)提供了丰富的容器类来帮助开发者管理和存储数据。下面我将介绍C++中常用的STL容器,并且为每个容器提供一个简单的示例来说明其基本用法。1.vector(向量)#include<iostream>#include<vector>intmain(){std::vector<int>vec;//添加元......
  • map(STL容器)
    map一种基于红黑树(不需了解)的关联树容器,支持快速的插入,查找和删除操作,并保持了内部元素的有序性,其中每一个元素都有一个键和一个与之关联得值组成。可以形象的理解为一个转换器,给它一个东西(变量),它就对应的给你一个东西(变量)。我们无需了解map的底层结构,只需知道如何使用以及......
  • CF1896C Matching Arrays 题解
    题目简述给定两个长度为$n$的数列$a,b$,再给定一个数$x$,请你判断是否存在一种重排$b$数列的方式,使得满足$a_i>b_i$的$i$恰好有$x$个。$n\leq2\times10^5$。题目分析遇到这种可行性问题,首先考虑做出最优解,以此来判断是否无解。接下来,可以思考最优解如何构造,我们......
  • CF1861C Queries for the Array
    CF1861CQueriesfortheArray不太一样的写法,感觉比较容易理解一点。码量也比较短。首先我们要发现:一个序列如果目前是升序的,那么它不管删多少个数(中间不再加数),最终还是升序的;如果目前不是升序,那么不管加多少个数,最终也不是升序。这启发我们用两个数组\(up_i\)和\(down_i\)......
  • c++ stl 之映射—— map 详解
     map是stl的一个关联容器,名叫“映射”,何为“映射”?其实就是一个数组,但有了数组何必还需映射,这是一个高深的问题。目录一、map简介         1.空间复杂度    2.时间复杂度     3.“键”的类型二、 map用法     1.声明  ......
  • CF718C Sasha and Array
    SashaandArray典题,但还是第一次见。首先看到斐波那契数列,可以想到矩阵快速幂。想到这一点之后,很大一部分都解决了。对于修改操作,实际上就是乘以一个矩阵。对于查询,就是矩阵加法。考虑用线段树维护矩阵。首先区间和可以矩阵加法直接做。由于我们需要区间乘,需要考虑如何下传标......
  • Arrays简单的使用方法
    数组packagemethod;importjava.util.Arrays;publicclassArrayDemo04{publicstaticvoidmain(String[]args){int[]a={1,2,15,47,56,22,222,11,4,4455};//Arrays.sort(a);//排序:升序Arrays.fill(a,2,4,0);//从2-4被0填充,fill填充......
  • 4.2、STL初识
    1、STL的诞生长久以来,软件界一直希望建立一种可重复利用的东西。C++面向对象和泛型编程思想,目的就是复用性的提升。大多数情况下,数据结构和算法都未能有一套标准,导致被迫从事大量的重复工作。为了建立数据结构和算法的一套标准,诞生了STL。2、STL的基本概念STL(standa......
  • Java学习笔记:ArrayList集合
    目录为什么要有集合:解决数组自动扩容的问题Java、python数据类型对比Java支持的数据类型主要分为两大类:Python支持多种数据类型,主要包括以下几种:在Java中常见的数据类型实现方式:Java通过使用集合框架来解决一组数据的存储和管理Java集合大致也可分成List、Set、Queue、Map四种接口......
  • 26.C++ STL常用容器—deque
    如果想单独一对一辅导学习C++、Java、Python编程语言的可以加微信咨询3.3deque容器3.3.1deque容器基本概念功能:双端数组,可以对头端进行插入删除操作deque与vector区别:vector对于头部的插入删除效率低,数据量越大,效率越低deque相对而言,对头部的插入删除速度回比v......