結果
| 問題 |
No.1358 [Zelkova 2nd Tune *] 語るなら枚数を...
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-02-13 20:23:26 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,049 bytes |
| コンパイル時間 | 240 ms |
| コンパイル使用メモリ | 82,304 KB |
| 実行使用メモリ | 80,896 KB |
| 最終ジャッジ日時 | 2024-07-21 00:13:54 |
| 合計ジャッジ時間 | 5,069 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 11 TLE * 1 -- * 5 |
ソースコード
mod=10**9+7
def gcd(a,b):
while b:a,b=b,a%b
return a
def main1(n,k,h,y):
ary=[n,k,h]
ary.sort()
a,b,c=ary
g=gcd(a,b)
na,nb=a//g,b//g
now=0
ans=0
while now<=y:
yy=y-now
now+=c
if yy%g!=0:continue
yy=yy//g
if yy==0:
ans+=1
continue
if yy<na:continue
if yy<nb:
if yy%na==0:
ans+=1
continue
# yy-nb*iがmod naで0になるiの個数
# yy%na=nb*i%na となるiの個数
# 0<=i<=yy//nb
# yy%na=nb*i%na となる最小のiを求める。あとは周期naで循環する。
u=yy%na
v=nb%na
# u=v*i
# u*v^(-1)=i
if u==0:
i=0
elif u==v:
i=1
else:
i=u*pow(v,-1,na)
i%=na
#print((na,nb),yy,i)
if yy-nb*i<0:continue
w=yy//nb
if i<=w:
ans+=(w-i)//na+1
ans%=mod
#print((u,v,w))
#print((na,nb,yy),i,w,(w-i)//na+1)
return ans
if __name__=='__main__':
t=int(input())
cases=[list(map(int,input().split())) for _ in range(t)]
for n,k,h,y in cases:
print(main1(n,k,h,y))