結果
| 問題 |
No.1358 [Zelkova 2nd Tune *] 語るなら枚数を...
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-02-13 20:50:31 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 711 ms / 2,000 ms |
| コード長 | 1,051 bytes |
| コンパイル時間 | 206 ms |
| コンパイル使用メモリ | 82,304 KB |
| 実行使用メモリ | 64,640 KB |
| 最終ジャッジ日時 | 2024-07-21 00:40:18 |
| 合計ジャッジ時間 | 5,239 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 |
ソースコード
def main0(n,k,h,y):
a,b=0,0
ans=0
while a<=y:
b=0
while a+b<=y:
yy=y-a-b
if yy%h==0:
ans+=1
b+=k
a+=n
return ans
def gcd(a,b):
while b:a,b=b,a%b
return a
def xgcd(a, b):
x0, y0, x1,y1=1,0,0,1
while b != 0:
q, a, b = a // b, b, a % b
x0, x1 = x1, x0 - q * x1
y0, y1 = y1, y0 - q * y1
return x0
memo={}
def modinv(a, m):
if (a,m) in memo:return memo[(a,m)]
x=xgcd(a, m)
memo[(a,m)]=x%m
return x % m
def ext_gcd(a, b): # a*x+b*y==gcd(a,b)たるgcd(a,b),x,y
if b > 0:
d,x,y = ext_gcd(b,a % b)
return d,y,x-(a//b)*y
return a,1,0
import sys
input=sys.stdin.readline
t=int(input())
cases=[list(map(int,input().split())) for _ in range(t)]
mod=10**9+7
for n,k,h,y in cases:
ary=[n,k,h]
ary.sort()
k,h,n=ary
g,a,b=ext_gcd(k,h)
k,h=k//g,h//g
ans=0
for i in range(y//n+1):
z=y-i*n
if z%g!=0:continue
z//=g
# k*u+h*v=z の解の個数
c,d=a*z,b*z
ans+=max(1+d//k-(-c+h-1)//h,0)
ans%=mod
print(ans)