結果
問題 |
No.3204 Permuted Integer
|
ユーザー |
👑 ![]() |
提出日時 | 2025-07-27 23:46:57 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 366 ms / 2,000 ms |
コード長 | 2,570 bytes |
コンパイル時間 | 270 ms |
コンパイル使用メモリ | 82,332 KB |
実行使用メモリ | 84,364 KB |
最終ジャッジ日時 | 2025-07-27 23:47:07 |
合計ジャッジ時間 | 7,963 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 26 |
ソースコード
class BaseException(Exception): def __init__(self, error_base): self.error_base = error_base def __str__(self): return f"指定した底 {self.error_base} は不正な底です." def Integer_Digits(n: int, b: int = 10, l: int = None) -> list[int]: """ 整数 n の底を b とした場合の表現を求める. Args: n (int): N b (int, optional): 底 (b >= 2). Defaults to 10. l (int): 長さが 0 になるように左側に 0 を埋めたり, 右から l 要素を取得する. Returns: list[int]: 表示 """ assert b >= 2, BaseException(b) n = abs(n) digits = [] if l is None: while (n > 0) or (not digits): n, r = divmod(n, b) digits.append(r) else: for _ in range(l): n, r = divmod(n, b) digits.append(r) return digits[::-1] def Integer_Length(n: int, b: int = 10) -> int: """ 整数 n の底を b とした場合の桁数を求める (0 は 0 桁とする). Args: n (int): N b (int, optional): 底 (b >= 2). Defaults to 10. Returns: int: 桁数 """ assert b >= 2, BaseException(b) return len(Integer_Digits(n, b)) if n != 0 else 0 def Digit_Count(n: int, b: int) -> list[int]: """ 整数 n の底を b とした場合における各数の出現回数を求める. Args: n (int): N b (int): 底 Returns: list[int]: 長さ b の配列. 第 k 要素は k の出現回数. """ assert b >= 2, BaseException(b) count = [0] * b for d in Integer_Digits(n, b): count[d] += 1 return count #================================================== def solve(): from math import isqrt T = int(input()) note: list[dict[tuple, int]] = [{} for _ in range(11)] for x in range(1, isqrt(pow(10, 9)) + 1): y = x * x d = tuple(Digit_Count(y, 10)) l = sum(d) if d not in note[l]: note[l][d] = y inf = pow(10, 12) for _ in range(T): N = int(input()) d = tuple(Digit_Count(N, 10)) ans = inf while True: l = sum(d) ans = min(ans, note[l].get(d, inf)) if d[0] == 0: break d_tmp = list(d) d_tmp[0] -= 1 d = tuple(d_tmp) yield ans if ans < inf else -1 #================================================== import sys input = sys.stdin.readline write = sys.stdout.write write("\n".join(map(str, solve())))