結果
問題 |
No.1630 Sorting Integers (Greater than K)
|
ユーザー |
![]() |
提出日時 | 2025-04-15 23:52:09 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,695 bytes |
コンパイル時間 | 168 ms |
コンパイル使用メモリ | 81,548 KB |
実行使用メモリ | 258,392 KB |
最終ジャッジ日時 | 2025-04-15 23:53:37 |
合計ジャッジ時間 | 4,737 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 11 TLE * 1 -- * 10 |
ソースコード
def main(): import sys input = sys.stdin.read().split() N = int(input[0]) K = input[1] c = list(map(int, input[2:11])) counts = [0] * 10 # counts[1..9] are used for i in range(9): counts[i+1] = c[i] # Check if N != len(K) if N != len(K): if N < len(K): print(-1) return else: # Generate minimal N-digit number res = [] for i in range(1, 10): res.extend([str(i)] * counts[i]) res.sort() print(''.join(res)) return # Check if the minimal number is greater than K minimal = [] for i in range(1, 10): minimal.extend([str(i)] * counts[i]) minimal.sort() minimal_str = ''.join(minimal) if minimal_str > K: print(minimal_str) return # Now, find the next number greater than K def can_form(s, cnt): current_counts = cnt.copy() for i in range(len(s)): current_digit = int(s[i]) # Check for any digit greater than current_digit for d in range(current_digit + 1, 10): if current_counts[d] > 0: return True # Check if current_digit is available if current_counts[current_digit] == 0: return False current_counts[current_digit] -= 1 return False prefix = [] current_counts = counts.copy() for i in range(N): d = int(K[i]) found = False for m in range(d, 10): if current_counts[m] == 0: continue if m > d: # Generate the number new_counts = current_counts.copy() new_counts[m] -= 1 remaining = [] for digit in range(1, 10): remaining.append(str(digit) * new_counts[digit]) remaining = ''.join(remaining) M = ''.join(prefix) + str(m) + remaining print(M) return else: # m == d new_counts = current_counts.copy() new_counts[m] -= 1 suffix = K[i+1:] if can_form(suffix, new_counts): prefix.append(str(m)) current_counts = new_counts found = True break if not found: print(-1) return # After processing all digits final_number = ''.join(prefix) if final_number > K: print(final_number) else: print(-1) if __name__ == "__main__": main()