D - Opposite Editorial by kusano


言語によっては複素数が扱えるので、複素平面で考えると楽に解けます。

\(p_0 = x_0+y_0i\)\(p_{\frac{N}{2}} = x_{\frac{N}{2}}+y_{\frac{N}{2}}i\)\(o=\frac{1}{2}\left(p_0+p_{\frac{N}{2}}\right)\)、長さが\(1\)で偏角が\(\frac{2\pi}{N}\)の複素数を\(r\)とすると、答えは\(p=(p_0-o)r+o\)です。

Pythonでの例。

import math, cmath

N = int(input())
x0, y0 = map(float, input().split())
xN2, yN2 = map(float, input().split())

p0 = complex(x0, y0)
pN2 = complex(xN2, yN2)
o = (p0+pN2)/2
r = cmath.rect(1, 2*math.pi/N)
a = (p0-o)*r+o

print("%.10f %.10f"%(a.real, a.imag))

posted:
last update: