QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#421912 | #6763. Triangle Pendant | shaletome | WA | 31ms | 11200kb | Python3 | 4.8kb | 2024-05-26 10:23:01 | 2024-05-26 10:23:02 |
Judging History
answer
# right behind ya
from cmath import *
import cmath
from math import *
def angle(z,y,a):
ttt=(z**2+y**2-a**2)/2/y/z
if ttt>1:
return 0
if ttt<-1:
return pi
# if abs(ttt)>1:
# print("WHAT")
# exit()
return acos(ttt)
lo=0
hi=pi
while hi-lo>0.0000001:
mid=(hi+lo)/2
dst=(z-y*cos(mid))**2+(y*sin(mid))**2
if dst > a*a:
hi=mid
else:
lo=mid
return (hi+lo)/2
def getcos(x,XX,lenzya):
return cos(angle(x,XX,lenzya))
# XM=XX*2/3
# return (x*x+(3/2*XM)**2-lenzya**2)/3/x/XM
def getmid(z,y,a):
mid=angle(z,y,a)
lenzya = (z+y*cos(mid))**2+(y*sin(mid))**2
lenzya /= 4
# if lenzya<0:
# print("WHAT")
# exit()
return sqrt(lenzya)
def istri(a,b,c):
return a+b>c and a+c>b and b+c>a
def geths(y,z,a):
A=angle(y,z,a)
y1=y
y2=0
z1=z*cos(A)
z2=z*sin(A)
h1=(y1+z1)/2
h2=(y2+z2)/2
th=atan2(h2,h1)
ya=y*cos(th)
yb=-y*sin(th)
za=z*cos(A-th)
zb=z*sin(A-th)
return ya,yb,za,zb
def chsl1(x,y,z,a,b,c):
if not istri(y,z,a):
return None
D=0+0j
B=y+0j
C=z*cmath.exp(1j*angle(y,z,a))
CB=B-C
CA=b*cmath.exp(1j*angle(b,a,c))*CB/cmath.polar(CB)[0]
A=CA+C
if x < cmath.polar(A)[0]-0.000001:
return None
M=(A+B+C)/3
A=A*cmath.polar(M)[0]/M
B=B*cmath.polar(M)[0]/M
C=C*cmath.polar(M)[0]/M
# print(A,B,C)
return [A.real,B.real,C.real]
# ya,yb,za,zb=geths(y,z,a)
# hh=(ya+za)/2+ getmid(b,c,a)
if x < hh-0.000001:
return None
# print("chsl1",x,y,z,a,b,c,hh, (x-hh)**2, (y-yb)**2+(z-zb)**2)
return [hh,ya,za]
def chsl2(x,y,z,a,b,c):
ba,bb,ca,cb=geths(b,c,a)
if (x+ba)**2+bb**2 <= y**2+0.00001 and (x+ca)**2+cb**2 <= z**2+0.00001:
# print("chsl2",x,y,z,a,b,c, (x+ba)**2+bb**2,y**2,(x+ca)**2+cb**2,z**2)
return [x,x+ca,x+ba]
return None
# def f(x,y,z,a,b,c):
# th=angle(b,c,a)
def h(x,y,z,a,b,c):
i=0
for tt in [(x,y,z,a,b,c),(y,z,x,b,c,a),(z,x,y,c,a,b)]:
if ans:=chsl2(*tt):
for _ in range(i):
ans=ans[-1:]+ans[:-1]
return ans
i += 1
i=0
for tt in [(x,y,z,a,b,c),(y,z,x,b,c,a),(z,x,y,c,a,b)]:
if ans:=chsl1(*tt):
for _ in range(i):
ans=ans[-1:]+ans[:-1]
return ans
i += 1
return None
def solve(x,y,z,a,b,c):
ans = h(x,y,z,a,b,c)
if ans:
print(*[-V for V in ans])
return
ans=[]
# brk=False
for x,y,z,a,b,c in [(x,y,z,a,b,c),(y,z,x,b,c,a),(z,x,y,c,a,b)]:
if a<abs(z-y):
continue
# if not istri(z,y,a):
# print("WHAT")
# exit()
lenzya=getmid(z,y,a)
XXX=getmid(b,c,a)
XM = XXX*2/3
costh=getcos(x,XXX,lenzya)
# if abs(costh)<0.00001:
# h(*og)
# brk=True
# break
H=sqrt(x*x+XM*XM-2*x*XM*costh)
ans.append(x*getcos(x,H,XM)*-1)
# if brk:continue
print(*ans)
def ok(x,y,z,a,b,c):
if not istri(a,b,c):
return False
Cx=0
Cy=0
Bx=a
By=0
Ax=b*getcos(a,b,c)
Ay=b*sin(acos(Ax/b))
Mx=(Ax+Bx+Cx)/3
My=(Ay+By+Cy)/3
if (Cx-Mx)**2+(Cy-My)**2 >= z*z+0.00001:
return False
if (Bx-Mx)**2+(By-My)**2 >= y*y+0.00001:
return False
if (Ax-Mx)**2+(Ay-My)**2 >= x*x+0.00001:
return False
return True
# K=1000
# from random import randint
# while True:
# x=randint(1,K)
# y=randint(1,K)
# z=randint(1,K)
# x,y,z=35,35,68
# a=randint(1,K)
# b=randint(1,K)
# c=randint(1,K)
# a,b,c=101,101,1
# if ok(x,y,z,a,b,c):
# print(x,y,z,a,b,c)
# solve(x,y,z,a,b,c)
# K=20
# for x in range(1,K):
# for y in range(1,x+1):
# for z in range(1,y+1):
# for a in range(1,min(K,x+y+z)):
# for b in range(1,min(K,x+y+z)):
# for c in range(1,min(K,x+y+z)):
# if ok(x,y,z,a,b,c):
# print(x,y,z,a,b,c)
# solve(x,y,z,a,b,c)
for _ in range(int(input())):
*og,=map(int,input().split())
solve(*og)
# (base) lawry@larry:~/comp/nac-24/day-2-1/E$ python3 E.py < 1.in
# 1.1547005383792246 1.1547005383792246 1.1547005383792246
# 2.309401076758408 3.418538212273144 3.418538212273144
# (base) lawry@larry:~/comp/nac-24/day-2-1/E$ python3 E.py < 1.in
# -1.000000000000018 -1.000000000000018 -1.000000000000018
# -2.0 -2.9605409356365042 -2.9605409356365042
# (base) lawry@larry:~/comp/nac-24/day-2-1/E$ lp
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 11ms
memory: 11000kb
input:
2 1 1 1 1 1 1 2 3 3 1 1 1
output:
-0.8164965809277261 -0.8164965809277261 -0.8164965809277261 -2 -2.8660254037844384 -2.8660254037844384
result:
ok 6 numbers
Test #2:
score: -100
Wrong Answer
time: 31ms
memory: 11200kb
input:
1000 21 2 14 12 13 4 29 19 13 15 10 17 29 24 15 29 24 23 29 17 30 18 9 25 27 24 30 16 4 15 28 13 17 12 21 16 16 22 10 22 15 8 15 23 24 23 27 13 26 3 27 15 16 17 5 8 20 17 6 12 24 14 13 15 19 13 27 22 18 18 23 30 22 18 14 11 29 28 7 13 22 22 17 11 19 9 16 22 20 17 21 14 20 6 29 25 20 10 19 9 27 27 17...
output:
-2.9358567275868337 -2 -13.352348999857675 -22.146476218003027 -16.07620470547688 -12.2418266590113 -28.027431433359673 -18.318582636182793 -8.243362186282255 -27.266119651334357 -13.15931958432565 -26.882525397692707 -26.53493336692567 -22.066632132649342 -29.616079568529667 -26.967804477491708 -12...
result:
wrong answer 28th numbers differ - expected: '-4.13677', found: '-5.00000', error = '0.20867'