結果
| 問題 |
No.1633 Sorting Integers (Multiple of 2^K)
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-09 21:02:54 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,831 bytes |
| コンパイル時間 | 322 ms |
| コンパイル使用メモリ | 82,284 KB |
| 実行使用メモリ | 154,164 KB |
| 最終ジャッジ日時 | 2025-04-09 21:04:54 |
| 合計ジャッジ時間 | 5,035 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 20 TLE * 1 -- * 24 |
ソースコード
import math
def solve():
N = int(input())
c = list(map(int, input().split()))
# Create a dictionary to check the counts of each digit.
input_counts = {str(d+1): c[d] for d in range(9)}
# Check if all digits are odd (leading to exponent 0)
all_odd = True
for d in range(1, 10):
if (d % 2 == 0) and c[d-1] > 0:
all_odd = False
break
if all_odd:
print(0)
return
# Check exact power of 2
log2 = math.log10(2)
lower_e = max(0, math.ceil((N-1) * log2))
upper_e = math.floor(N * log2)
max_e = -1
for e in range(lower_e, upper_e + 1):
num = 1 << e
s = str(num)
if len(s) != N:
continue
temp_counts = {}
for ch in s:
temp_counts[ch] = temp_counts.get(ch, 0) + 1
valid = True
for d in range(1, 10):
key = str(d)
if temp_counts.get(key, 0) != input_counts.get(key, 0):
valid = False
break
if valid:
max_e = e
break # Found the maximum possible e
if max_e != -1:
print(max_e)
return
# Fallback to permutations (only feasible for very small N)
from itertools import permutations
digits = []
for d in range(9):
digits.extend([str(d+1)] * c[d])
max_k = 0
seen = set()
for perm in permutations(digits):
num_str = ''.join(perm)
if num_str in seen:
continue
seen.add(num_str)
if perm[-1] in {'1', '3', '5', '7', '9'}:
continue
num = int(num_str)
current_k = 0
while num % 2 == 0:
current_k += 1
num //= 2
if current_k > max_k:
max_k = current_k
print(max_k)
solve()
lam6er