結果
| 問題 |
No.1185 完全な3の倍数
|
| コンテスト | |
| ユーザー |
FromBooska
|
| 提出日時 | 2023-03-12 09:44:44 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 93 ms / 2,000 ms |
| コード長 | 924 bytes |
| コンパイル時間 | 276 ms |
| コンパイル使用メモリ | 81,920 KB |
| 実行使用メモリ | 85,760 KB |
| 最終ジャッジ日時 | 2024-09-18 06:56:21 |
| 合計ジャッジ時間 | 4,343 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 39 |
ソースコード
# 10-99までは、12,33,54などありうる、ここは全探索すればいい
# 100以上では、すべてが3の倍数[0, 3, 6, 9]でなければありえない
# たとえば102はアウト、300, 303, 306, 309はOK
# 3桁以上はDFSで探索するか?
N = int(input())
two_digit = []
for i in range(10, 100):
t = 0
for s in str(i):
t += int(s)
if t%3 == 0:
two_digit.append(i)
two_count = len(two_digit)
#print(two_digit)
import sys
sys.setrecursionlimit(10**7)
def dfs(num):
global ans_list
# 100以上
if 100 <= num <= N:
ans_list.append(num)
if num <= N:
dfs(num*10)
dfs(num*10+3)
dfs(num*10+6)
dfs(num*10+9)
ans_list = []
for i in [3, 6, 9]:
dfs(i)
if N >= 100:
ans = two_count + len(ans_list)
print(ans)
else:
ans = 0
for t in two_digit:
if t <= N:
ans += 1
print(ans)
FromBooska