Analysis
题目大意为给定一个多边形的各边中点,判断是否存在合法的多边形。题目对合法的定义很宽松,所以变得很水……对n的奇偶性进行分类讨论,若为奇数直接解方程输出,若为偶数则需判断无解还是任意解。
Accepted Code
const
zero=1e-8;
var
p,q,u,v,x,y:array[0..10100] of extended;
n,i:longint;
begin
readln(n);
for i:=1 to n do
read(p[i],q[i]);
if odd(n) then
begin
u[1]:=0;
v[2]:=0;
for i:=1 to n do
begin
u[i+1]:=2*p[i]-u[i];
v[i+1]:=2*q[i]-v[i];
end;
x[1]:=p[n]-(u[1]+u[n])/2;
y[1]:=q[n]-(v[1]+v[n])/2;
writeln('YES');
for i:=1 to n do
begin
x[i+1]:=2*p[i]-x[i];
y[i+1]:=2*q[i]-y[i];
writeln(x[i]:0:3,' ',y[i]:0:3);
end;
end
else
begin
x[1]:=-1.0;
y[1]:=1.0;
for i:=1 to n do
begin
x[i+1]:=2*p[i]-x[i];
y[i+1]:=2*q[i]-y[i];
end;
if (abs(x[1]-x[n+1])<=zero) and (abs(y[1]-y[n+1])<=zero) then
begin
writeln('YES');
for i:=1 to n do
writeln(x[i]:0:3,' ',y[i]:0:3);
end
else
writeln('NO');
end;
end.