Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated, T-shirts + prizes!) A. Kuroni and the Gifts

A. Kuroni and the Gifts
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
Kuroni has n daughters. As gifts for them, he bought n necklaces and n bracelets:

the i-th necklace has a brightness ai, where all the ai are pairwise distinct (i.e. all ai are different),
the i-th bracelet has a brightness bi, where all the bi are pairwise distinct (i.e. all bi are different).
Kuroni wants to give exactly one necklace and exactly one bracelet to each of his daughters. To make sure that all of them look unique, the total brightnesses of the gifts given to each daughter should be pairwise distinct. Formally, if the i-th daughter receives a necklace with brightness xi and a bracelet with brightness yi, then the sums xi+yi should be pairwise distinct. Help Kuroni to distribute the gifts.

For example, if the brightnesses are a=[1,7,5] and b=[6,1,2], then we may distribute the gifts as follows:

Give the third necklace and the first bracelet to the first daughter, for a total brightness of a3+b1=11.
Give the first necklace and the third bracelet to the second daughter, for a total brightness of a1+b3=3.
Give the second necklace and the second bracelet to the third daughter, for a total brightness of a2+b2=8.
Here is an example of an invalid distribution:

Give the first necklace and the first bracelet to the first daughter, for a total brightness of a1+b1=7.
Give the second necklace and the second bracelet to the second daughter, for a total brightness of a2+b2=8.
Give the third necklace and the third bracelet to the third daughter, for a total brightness of a3+b3=7.
This distribution is invalid, as the total brightnesses of the gifts received by the first and the third daughter are the same. Don’t make them this upset!

Input
The input consists of multiple test cases. The first line contains an integer t (1≤t≤100) — the number of test cases. The description of the test cases follows.

The first line of each test case contains a single integer n (1≤n≤100) — the number of daughters, necklaces and bracelets.

The second line of each test case contains n distinct integers a1,a2,…,an (1≤ai≤1000) — the brightnesses of the necklaces.

The third line of each test case contains n distinct integers b1,b2,…,bn (1≤bi≤1000) — the brightnesses of the bracelets.

Output
For each test case, print a line containing n integers x1,x2,…,xn, representing that the i-th daughter receives a necklace with brightness xi. In the next line print n integers y1,y2,…,yn, representing that the i-th daughter receives a bracelet with brightness yi.

The sums x1+y1,x2+y2,…,xn+yn should all be distinct. The numbers x1,…,xn should be equal to the numbers a1,…,an in some order, and the numbers y1,…,yn should be equal to the numbers b1,…,bn in some order.

It can be shown that an answer always exists. If there are multiple possible answers, you may print any of them.

Example
inputCopy
2
3
1 8 5
8 4 5
3
1 7 5
6 1 2
outputCopy
1 8 5
8 4 5
5 1 7
6 2 1
Note
In the first test case, it is enough to give the i-th necklace and the i-th bracelet to the i-th daughter. The corresponding sums are 1+8=9, 8+4=12, and 5+5=10.

The second test case is described in the statement.

题意:就是说给了你两个长度为n的数组,现在想让你选择数组a的一个数和数组b的一个数求和 让你输出一种组合方式 让和的值各不相同

思路:我们把a和b排序后 对应的最小+最小 第二小+第二小…最大+最大
这样就保证各个值不同了

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define me(a,x) memset(a,x,sizeof a)
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define all(x) (x).begin(), (x).end()
#define pb(a) push_back(a)
#define paii pair<int,int>
#define pali pair<ll,int>
#define pail pair<int,ll>
#define pall pair<ll,ll>
#define fi first
#define se second
vector<int> a,b;
int main()
{
    int t;cin>>t;
    while(t--){

        int n;cin>>n;
        a.resize(n),b.resize(n);
        for(int i=0;i<n;i++) cin>>a[i];
        for(int i=0;i<n;i++) cin>>b[i];
        sort(all(a)),sort(all(b));
        for(int i=0;i<n;i++) cout<<a[i]<<" ";
        puts("");
        for(int i=0;i<n;i++) cout<<b[i]<<" ";
        puts("");

    }
   return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不会c语言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值