QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#844349 | #9804. Guess the Polygon | lonelywolf | RE | 0ms | 0kb | Python3 | 1.7kb | 2025-01-05 19:59:17 | 2025-01-05 19:59:17 |
Judging History
answer
import sys
import numpy as np
import math
class Frac():
def __init__(self, num: int, den: int):
self.num = num
self.den = den
def add(a: Frac, b: Frac) -> Frac:
return Frac(a.num * b.den + a.den * b.num, a.den * b.den)
def mul(a: Frac, b: Frac) -> Frac:
return Frac(a.num * b.num, a.den * b.den)
def ask(x: Frac) -> Frac:
g = math.gcd(x.den, x.num)
x.den //= g
x.num //= g
print('?', x.num, x.den)
sys.stdout.flush()
num, den = map(int, input().split())
return Frac(num, den)
def answer(x: Frac):
g = math.gcd(x.den, x.num)
x.den //= g
x.num //= g
print('!', x.num, x.den)
sys.stdout.flush()
def solve():
n = int(input())
st = set()
for i in range(n):
x, y = map(int, input().split())
st.add(x)
a = [v for v in st]
a.sort()
cnt = len(a)
def work1():
l = [Frac(0, 1)]
for i in range(1, cnt - 1):
t = ask(Frac(a[i], 1))
l.append(t)
l.append(Frac(0, 1))
ans = Frac(0, 1)
for i in range(0, cnt - 1):
ans = add(ans, mul(add(l[i], l[i + 1]), Frac(a[i + 1] - a[i], 2)))
answer(ans)
def work2():
l = []
for i in range(0, cnt - 1):
t = ask(Frac(a[i] + a[i + 1], 2))
l.append(t)
ans = Frac(0, 1)
for i in range(0, cnt - 1):
ans = add(ans, mul(l[i], Frac(a[i + 1] - a[i], 1)))
answer(ans)
if cnt == n:
work1()
else:
work2()
if __name__ == "__main__":
t = int(input())
while t > 0:
t -= 1
solve()
詳細信息
Test #1:
score: 0
Dangerous Syscalls
input:
2 4 3 0 1 3 1 1 0 0