結果
問題 |
No.434 占い
|
ユーザー |
![]() |
提出日時 | 2025-04-24 12:20:44 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 112 ms / 2,000 ms |
コード長 | 2,258 bytes |
コンパイル時間 | 379 ms |
コンパイル使用メモリ | 82,624 KB |
実行使用メモリ | 88,596 KB |
最終ジャッジ日時 | 2025-04-24 12:22:12 |
合計ジャッジ時間 | 3,481 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 27 |
ソースコード
import sys def main(): input = sys.stdin.read().split() T = int(input[0]) cases = input[1:T+1] max_n = 10**5 fact = [1] * (max_n + 1) count_3 = [0] * (max_n + 1) for x in range(1, max_n + 1): m = x cnt = 0 while m % 3 == 0: cnt += 1 m = m // 3 count_3[x] = count_3[x-1] + cnt fact[x] = (fact[x-1] * m) % 9 inv = {1: 1, 2: 5, 4: 7, 5: 2, 7: 4, 8: 8} for s in cases: n = len(s) if n == 1: print(s) continue n_minus_1 = n - 1 total = 0 for i in range(n): d = int(s[i]) % 9 k = i if k > n_minus_1 - k: k = n_minus_1 - k # Use symmetry of combinations sum_n = count_3[n_minus_1] sum_k = count_3[k] sum_nk = count_3[n_minus_1 - k] e = sum_n - sum_k - sum_nk if e >= 2: mod_val = 0 elif e == 1: numerator = fact[n_minus_1] denominator = (fact[k] * fact[n_minus_1 - k]) % 9 if denominator == 0: mod_val = 0 else: inv_den = inv.get(denominator, 0) if inv_den == 0: mod_val = 0 else: m = (numerator * inv_den) % 9 mod_val = (3 * m) % 9 else: numerator = fact[n_minus_1] denominator = (fact[k] * fact[n_minus_1 - k]) % 9 if denominator == 0: mod_val = 0 else: inv_den = inv.get(denominator, 0) if inv_den == 0: mod_val = 0 else: mod_val = (numerator * inv_den) % 9 term = (d * mod_val) % 9 total += term total_mod = total % 9 if total_mod == 0: if all(c == '0' for c in s): print(0) else: print(9) else: print(total_mod) if __name__ == "__main__": main()