A. Mean Inequality #723 Div.2


https://codeforces.com/contest/1516/problem/A
1秒、256 MBメモリ
input :
  • t (1≤t≤1000)
  • n (2≤n≤25)
  • a1,a2,…,a2n (1≤ai≤109)
  • output :
  • For each testcase, you should output 2n integers, b1,b2,…b2n, for which the conditions from the statement are satisfied.
    各試験例は、条件を満たす2 n個の整数を出力する必要がある.
  • 条件:
  • You want to arrange the elements of the array in a circle such that no element is equal to the the arithmetic mean of its 2 neighbours.
    配列内の要素を円にする場合は、隣接する2つの要素の平均値と同じではありません.
  • 科波は数学が好きらしい.
    最初は昇順で並べ替え、各要素を比較し、条件に合わない要素であれば左側の位置と位置を変更しようとします.しかし、これには例外(エラー)があります.
    問題の答えを見るまで私は理解した.ヒントは配列を2つの部分に分けることです.最初は奇数奇数奇数に分けて置けばいいかなと思っていましたが、数字が合わない場合があります
    入力配列の数が偶数であることを見て、それを大きいものと小さいものに分けると、両者に同じ数を持たせることができます.
    では、この問題をどのようにリストしますか.小さな配列の最大値、大きな配列の最小値を同じ値にするには、他の要素は小さな配列から取得する必要があります.
    したがって、平均値を同じにしたくない場合は、大きさ、大きさの順にリストすればよい.
    AMAZING..
    import sys
    
    t = int(sys.stdin.readline())
    for i in range(t):
        n = int(sys.stdin.readline())
        data = list(map(int, sys.stdin.readline().split()))
        data.sort()
    
        left = data[:len(data) // 2]
        right = data[len(data) // 2:]
        ans = []
        for j in range(len(left)):
            ans.append(left[j])
            ans.append(right[j])
        print(*ans)