1. 程式人生 > 實用技巧 >DHUACM-contest1-B. Two Arrays And Swaps

DHUACM-contest1-B. Two Arrays And Swaps

題目

B. Two Arrays And Swaps
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
You are given two arrays a and b both consisting of n positive (greater than zero) integers. You are also given an integer k.

In one move, you can choose two indices i and j (1≤i,j≤n) and swap ai and bj (i.e. ai becomes bj and vice versa). Note that i and j can be equal or different (in particular, swap \(a_2\)

with \(b_2\) or swap $ a_3$ and \(b_9\) both are acceptable moves).

Your task is to find the maximum possible sum you can obtain in the array \(a\) if you can do no more than (i.e. at most) k such moves (swaps).

You have to answer t independent test cases.

Input
The first line of the input contains one integer t (1≤t≤200) — the number of test cases. Then t test cases follow.

The first line of the test case contains two integers n and k (1≤n≤30;0≤k≤n) — the number of elements in a and b and the maximum number of moves you can do. The second line of the test case contains n integers$ a_1,a_2,…,a_n$ (1≤\(a_i\)≤30), where ai is the i-th element of a. The third line of the test case contains n integers $b_1,b_2,…,b_n \((1≤\)

b_i$≤30), where bi is the i-th element of b.

Output
For each test case, print the answer — the maximum possible sum you can obtain in the array a if you can do no more than (i.e. at most) k swaps.

Example

inputCopy
5
2 1
1 2
3 4
5 5
5 5 6 6 5
1 2 5 4 3
5 3
1 2 3 4 5
10 9 10 10 9
4 0
2 2 4 3
2 4 2 3
4 4
1 2 2 1
4 4 5 4
outputCopy
6
27
39
11
17

Note
In the first test case of the example, you can swap a1=1 and b2=4, so a=[4,2] and b=[3,1].

In the second test case of the example, you don't need to swap anything.

In the third test case of the example, you can swap a1=1 and b1=10, a3=3 and b3=10 and a2=2 and b4=10, so a=[10,10,10,4,5] and b=[1,9,3,2,9].

In the fourth test case of the example, you cannot swap anything.

In the fifth test case of the example, you can swap arrays a and b, so a=[4,4,5,4] and b=[1,2,2,1].

思路

把數列b裡的較大的數替換替換掉數列a裡較小的數,最多k次替換,且數列a的總和必須要增加。所以直接把b中數列最大的k個數塞入a中,然後對數列a進行降序排序,取前n個元素就好。

程式碼

#include<iostream>
#include<algorithm>
using namespace std;

bool cmp(int x,int y)
{
    return x>y;
}

vector<int> arr1,arr2;

int main()
{
    int t,n,i,k,sum,num,x;
    cin>>t;
    while(t--)
    {
        arr1.clear();
        arr2.clear();
        cin>>n>>k;
        sum=0;
        num=0;
        for(i=0;i<n;++i)
        {
            cin>>x;
            arr1.push_back(x);
        }
        for(i=0;i<n;++i)
        {
            cin>>x;
            arr2.push_back(x);
        }
        sort(arr2.begin(),arr2.end(),cmp);
        for(i=0;i<k;++i)
            arr1.push_back(arr2[i]);
        sort(arr1.begin(),arr1.end(),cmp);
        for(i=0;i<n;++i)
            sum+=arr1[i];
        cout<<sum<<endl;
    }
    return 0;
}