結果
| 問題 |
No.1252 数字根D
|
| コンテスト | |
| ユーザー |
👑 SPD_9X2
|
| 提出日時 | 2020-10-10 02:08:55 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 862 bytes |
| コンパイル時間 | 318 ms |
| コンパイル使用メモリ | 82,432 KB |
| 実行使用メモリ | 67,584 KB |
| 最終ジャッジ日時 | 2024-07-20 15:28:26 |
| 合計ジャッジ時間 | 1,776 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 13 WA * 1 |
ソースコード
"""
https://yukicoder.me/problems/no/1252
桁ごとに和を取っていき、1桁にする演算
それをd進法でやる
A以上B以下に関してその総和を求める
0以上X以下の答え=f(X)さえ求められれば
f(B)-f(A-1)で答えが求まる
3進法で検証
0
1
2
10,1
11,2
12,10,1
20,2
21,10,1
22,11,2
100,1
→1,2,3…dを繰り返す?
"""
def Dsum(num,d):
#print (num,d)
if num < d:
return num
ret = 0
while num > 0:
ret += num % d
num //= d
return Dsum(ret,d)
def f(x,d):
ans = (x // (d-1)) * (d * (d-1) // 2)
rem = x % (d-1)
ans += (1+rem) * rem // 2
return ans
from sys import stdin
TT = int(stdin.readline())
for loop in range(TT):
d,A,B = map(int,stdin.readline().split())
if A == B == 0:
print (0)
else:
print( f(B,d)-f(A-1,d) )
SPD_9X2