結果
問題 | No.2970 三次関数の絶対値 |
ユーザー |
|
提出日時 | 2024-11-29 22:34:41 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 48 ms / 2,000 ms |
コード長 | 12,323 bytes |
コンパイル時間 | 419 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 54,656 KB |
最終ジャッジ日時 | 2024-11-29 22:34:45 |
合計ジャッジ時間 | 3,977 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 50 |
ソースコード
def g(x):return C[3]*x*x*x+C[2]*x*x+C[1]*x+C[0]def f(x):global a, b, creturn a*x*x+b*x+cimport sysinput = sys.stdin.readlineC = list(map(int, input().split()))L, R = map(int, input().split())if L==R:print(g(L))exit()# ax^2+bx+c=0c, b, a = C[1], C[2]*2, C[3]*3D = b*b-4*a*cif D<0:# 実数解なし# 単調v = f(L)if v>=0:# 増加l = g(L)r = g(R)if l<=0 and 0<=r:ans = 0else:if l>0:ans = abs(l)else:ans = abs(r)else:# 減少l = g(L)r = g(R)if r<=0 and 0<=l:ans = 0else:if l>0:ans = abs(r)else:ans = abs(l)elif D>0:if a==0:# 1個x = -c/bif R<=x:# L, R, x# 単調v = f(L)if v>=0:# 増加l = g(L)r = g(R)if l<=0 and 0<=r:ans = 0else:if l>0:ans = abs(l)else:ans = abs(r)else:# 減少l = g(L)r = g(R)if r<=0 and 0<=l:ans = 0else:if l>0:ans = abs(r)else:ans = abs(l)elif x<=L:# x, L, R# 単調v = f(R)if v>=0:# 増加l = g(L)r = g(R)if l<=0 and 0<=r:ans = 0else:if l>0:ans = abs(l)else:ans = abs(r)else:# 減少l = g(L)r = g(R)if r<=0 and 0<=l:ans = 0else:if l>0:ans = abs(r)else:ans = abs(l)else:# L, x, R# L<xv = f(L)if v>=0:# 増加l = g(L)r = g(x)if l<=0 and 0<=r:ans = 0else:if l>0:ans = abs(l)else:ans = abs(r)else:# 減少l = g(L)r = g(x)if r<=0 and 0<=l:ans = 0else:if l>0:ans = abs(r)else:ans = abs(l)# x<Rv = f(R)if v>=0:# 増加l = g(x)r = g(R)if l<=0 and 0<=r:ans = 0else:if l>0:ans = min(ans, abs(l))else:ans = min(ans, abs(r))else:# 減少l = g(x)r = g(R)if r<=0 and 0<=l:ans = 0else:if l>0:ans = min(ans, abs(r))else:ans = min(ans, abs(l))else:# 実数解ありx1 = (-b+D**0.5)/(2*a)x2 = (-b-D**0.5)/(2*a)if x1>x2:x1, x2 = x2, x1if L<=x1:if R<=x1:# L, R, x1, x2# 単調v = f(L)w = f(R)if v>0 or w>0:# 増加l = g(L)r = g(R)if l<=0 and 0<=r:ans = 0else:if l>0:ans = abs(l)else:ans = abs(r)else:# 減少l = g(L)r = g(R)if r<=0 and 0<=l:ans = 0else:if l>0:ans = abs(r)else:ans = abs(l)elif x2<R:# L, x1, x2, R# L<x1v = f(L)if v>=0:# 増加l = g(L)r = g(x1)if l<=0 and 0<=r:ans = 0else:if l>0:ans = abs(l)else:ans = abs(r)else:# 減少l = g(L)r = g(x1)if r<=0 and 0<=l:ans = 0else:if l>0:ans = abs(r)else:ans = abs(l)# x1<x2mid = (x1+x2)/2v = f(mid)if v>=0:# 増加l = g(x1)r = g(x2)if l<=0 and 0<=r:ans = 0else:if l>0:ans = min(ans, abs(l))else:ans = min(ans, abs(r))else:# 減少l = g(x1)r = g(x2)if r<=0 and 0<=l:ans = 0else:if l>0:ans = min(ans, abs(r))else:ans = min(ans, abs(l))# x2<Rv = f(R)if v>=0:# 増加l = g(x2)r = g(R)if l<=0 and 0<=r:ans = 0else:if l>0:ans = min(ans, abs(l))else:ans = min(ans, abs(r))else:# 減少l = g(x2)r = g(R)if r<=0 and 0<=l:ans = 0else:if l>0:ans = min(ans, abs(r))else:ans = min(ans, abs(l))else:# L, x1, R, x2# L<x1v = f(L)if v>=0:# 増加l = g(L)r = g(x1)if l<=0 and 0<=r:ans = 0else:if l>0:ans = abs(l)else:ans = abs(r)else:# 減少l = g(L)r = g(x1)if r<=0 and 0<=l:ans = 0else:if l>0:ans = abs(r)else:ans = abs(l)# x1<Rv = f(R)if v>=0:# 増加l = g(x1)r = g(R)if l<=0 and 0<=r:ans = 0else:if l>0:ans = min(ans, abs(l))else:ans = min(ans, abs(r))else:# 減少l = g(x1)r = g(R)if r<=0 and 0<=l:ans = 0else:if l>0:ans = min(ans, abs(r))else:ans = min(ans, abs(l))elif x2<=L:# x1, x2, L, R# 単調v = f(L)w = f(R)if v>0 or w>0:# 増加l = g(L)r = g(R)if l<=0 and 0<=r:ans = 0else:if l>0:ans = abs(l)else:ans = abs(r)else:# 減少l = g(L)r = g(R)if r<=0 and 0<=l:ans = 0else:if l>0:ans = abs(r)else:ans = abs(l)else:if x2<R:# x1, L, x2, R# L<x2v = f(L)if v>=0:# 増加l = g(L)r = g(x2)if l<=0 and 0<=r:ans = 0else:if l>0:ans = abs(l)else:ans = abs(r)else:# 減少l = g(L)r = g(x2)if r<=0 and 0<=l:ans = 0else:if l>0:ans = abs(r)else:ans = abs(l)# x2<Rv = f(R)if v>=0:# 増加l = g(x2)r = g(R)if l<=0 and 0<=r:ans = 0else:if l>0:ans = min(ans, abs(l))else:ans = min(ans, abs(r))else:# 減少l = g(x2)r = g(R)if r<=0 and 0<=l:ans = 0else:if l>0:ans = min(ans, abs(r))else:ans = min(ans, abs(l))else:# x1, L, R, x2# 単調v = f(L)w = f(R)if v>0 or w>0:# 増加l = g(L)r = g(R)if l<=0 and 0<=r:ans = 0else:if l>0:ans = abs(l)else:ans = abs(r)else:# 減少l = g(L)r = g(R)if r<=0 and 0<=l:ans = 0else:if l>0:ans = abs(r)else:ans = abs(l)else:# 1個# 単調v = f(L)w = f(R)if v>0 or w>0:# 増加l = g(L)r = g(R)if l<=0 and 0<=r:ans = 0else:if l>0:ans = abs(l)else:ans = abs(r)else:# 減少l = g(L)r = g(R)if r<=0 and 0<=l:ans = 0else:if l>0:ans = abs(r)else:ans = abs(l)print(ans)