Tit for Tat #717 Div.2


https://codeforces.com/contest/1516/problem/A
1秒、256 MBメモリ
input :
  • t (1≤t≤20)
  • n k(2≤n≤100 , 1≤k≤10000)
  • a1 , a2, …, an (0≤ai≤100)
  • output :
  • print the lexicographically smallest array you can obtain
  • 条件:
  • An array x is lexicographically smaller
  • 辞書では、辞書の順序を意味し、各配列を辞書の順序で並べることができます.
  • アルファベット順に表示するには、配列内の各要素を比較するときに、同じidx内の要素に差がある必要があります.正解リストの場合、前に元のリストよりも小さい値がある必要があります.
    たとえば、3 1 4と入力すると、2 1 5はアルファベット順に前に表示されます.k回繰り返し、配列長はn回を超えてはならない.
    idxに存在する値がkよりも大きい場合、kの値を0に設定し、data[idx]を更新し、そうでなければkからdata[idx]を減算し、kを0に更新する.
    while文の条件に注意しましょう.
    正解コードの場合はn-1要素を追加し続けます...条件には100以下の条件があり、この場合も例外処理が必要である.
    import sys
     
    t = int(sys.stdin.readline())
    for i in range(t):
        n, k = map(int, sys.stdin.readline().split())
        data = list(map(int, sys.stdin.readline().split()))
     
        idx = 0
        while k > 0 and idx < n - 1:
            if data[idx] < k:
                data[n - 1] += data[idx]
                k -= data[idx]
                data[idx] = 0
            else:
                data[idx] -= k
                data[n - 1] += k
                k = 0
     
            idx += 1
     
        for item in data:
            print(item, end=" ")
        print()