結果
問題 |
No.1630 Sorting Integers (Greater than K)
|
ユーザー |
![]() |
提出日時 | 2025-06-12 19:58:07 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,600 bytes |
コンパイル時間 | 159 ms |
コンパイル使用メモリ | 82,320 KB |
実行使用メモリ | 299,020 KB |
最終ジャッジ日時 | 2025-06-12 20:00:54 |
合計ジャッジ時間 | 5,225 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 7 WA * 4 TLE * 1 -- * 10 |
ソースコード
def main(): import sys input = sys.stdin.read().split() idx = 0 N = int(input[idx]) idx += 1 K = input[idx] idx += 1 c = list(map(int, input[idx:idx+9])) idx += 9 digits = [] for i in range(9): digits.extend([i+1] * c[i]) if len(K) > N: print(-1) return elif len(K) < N: digits.sort() min_first = min(d for d in digits if d != 0) pos = digits.index(min_first) digits = [min_first] + digits[:pos] + digits[pos+1:] print(''.join(map(str, digits))) return max_M = sorted(digits, reverse=True) max_M_str = ''.join(map(str, max_M)) if len(max_M_str) < len(K): print(-1) return if max_M_str <= K: print(-1) return k_digits = list(K) available = c.copy() M = [] for i in range(N): found = False for d in range(10): if available[d-1] == 0: continue if d < int(k_digits[i]): continue available[d-1] -= 1 if d > int(k_digits[i]): remaining = [] for j in range(9): remaining.extend([j+1] * available[j]) remaining.sort() M_part = ''.join(map(str, M + [d] + remaining)) print(M_part) return else: suffix = k_digits[i+1:] temp_available = available.copy() temp_available[d-1] += 1 temp_available[d-1] -= 1 remaining = [] for j in range(9): remaining.extend([j+1] * temp_available[j]) remaining.sort(reverse=True) max_suffix = ''.join(map(str, remaining)) if len(max_suffix) < len(suffix): available[d-1] += 1 continue for c1, c2 in zip(max_suffix, suffix): if c1 > c2: break elif c1 < c2: available[d-1] += 1 break else: if len(max_suffix) > len(suffix): pass else: available[d-1] += 1 continue M.append(d) found = True break available[d-1] += 1 if not found: print(-1) return print(-1) if __name__ == "__main__": main()