結果
問題 | No.2066 Simple Math ! |
ユーザー |
|
提出日時 | 2022-09-03 13:41:11 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,268 ms / 2,000 ms |
コード長 | 2,156 bytes |
コンパイル時間 | 659 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 81,584 KB |
最終ジャッジ日時 | 2024-11-17 03:33:52 |
合計ジャッジ時間 | 27,053 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 31 |
ソースコード
import sys, randominput = lambda : sys.stdin.readline().rstrip()write = lambda x: sys.stdout.write(x+"\n"); writef = lambda x: print("{:.12f}".format(x))debug = lambda x: sys.stderr.write(x+"\n")YES="Yes"; NO="No"; pans = lambda v: print(YES if v else NO); INF=10**18LI = lambda : list(map(int, input().split())); II=lambda : int(input())def debug(_l_):for s in _l_.split():print(f"{s}={eval(s)}", end=" ")print()def dlist(*l, fill=0):if len(l)==1:return [fill]*l[0]ll = l[1:]return [dlist(*ll, fill=fill) for _ in range(l[0])]def floor_sum_unsighned(n,m,a,b):"""sum(((a*i+b)//m) for i in range(n))n>=0, m>=1"""ans = 0if a>=m:ans += (n-1)*n*(a//m)//2a %= mif b>=m:ans += n*(b//m)b %= my_max = (a*n + b) // mx_max = y_max*m - bif y_max==0:return ansans += (n - (x_max+a-1)//a) * y_maxans += floor_sum(y_max, a, m, (a - x_max%a)%a)return ans# assert(0 <= n && n < (1LL << 32));# assert(1 <= m && m < (1LL << 32));# unsigned long long ans = 0;# if (a < 0) {# unsigned long long a2 = internal::safe_mod(a, m);# ans -= 1ULL * n * (n - 1) / 2 * ((a2 - a) / m);# a = a2;# }# if (b < 0) {# unsigned long long b2 = internal::safe_mod(b, m);# ans -= 1ULL * n * ((b2 - b) / m);# b = b2;# }# return ans + internal::floor_sum_unsigned(n, m, a, b);# }def floor_sum(n,m,a,b):assert(0<=n and 1<=m)ans = 0if a<0:a2 = a%mans -= n*(n-1)//2 * ((a2-a)//m)a = a2if b<0:b2 = b%mans -= n * ((b2-b)//m)b = b2return ans + floor_sum_unsighned(n,m,a,b)import matht = II()for _ in range(t):p,q,k = LI()g = math.gcd(p,q)# print(p,q,g)p //= gq //= gok = 10**18 + 100ng = 0while abs(ok-ng)>1:mm = (ok+ng)//2qq = min(mm//p + 1, q)# qq = qval = floor_sum(qq, q, -p, mm) + qqif val>k:ok = mmelse:ng = mmans = ok * gprint(ans)