結果
| 問題 |
No.1633 Sorting Integers (Multiple of 2^K)
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 20:43:50 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,443 bytes |
| コンパイル時間 | 190 ms |
| コンパイル使用メモリ | 81,852 KB |
| 実行使用メモリ | 77,540 KB |
| 最終ジャッジ日時 | 2025-06-12 20:44:06 |
| 合計ジャッジ時間 | 6,502 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 17 WA * 3 TLE * 1 -- * 24 |
ソースコード
def main():
import sys
sys.setrecursionlimit(1 << 25)
N = int(sys.stdin.readline())
counts = list(map(int, sys.stdin.readline().split()))
max_k = 46
for k in range(max_k, -1, -1):
mod_value = 1 << k
s = str(mod_value)
len_s = len(s)
if len_s > N:
continue
elif len_s == N:
temp_counts = [0] * 10
for ch in s:
d = int(ch)
temp_counts[d] += 1
match = True
for i in range(1, 10):
if temp_counts[i] != counts[i - 1]:
match = False
break
if match:
print(k)
return
else:
if can_form_suffix(k, mod_value, counts):
print(k)
return
print(0)
def can_form_suffix(k, mod_value, counts):
available = counts.copy()
def backtrack(pos, remainder):
if pos == k:
return remainder == 0
for d in range(1, 10):
if available[d - 1] == 0:
continue
available[d - 1] -= 1
new_remainder = (remainder * 10 + d) % mod_value
if backtrack(pos + 1, new_remainder):
available[d - 1] += 1
return True
available[d - 1] += 1
return False
return backtrack(0, 0)
if __name__ == "__main__":
main()
gew1fw