您的位置:首页 > 其它

[SGU]136. Erasing Edges

2012-11-01 19:43 148 查看
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
-(u[1]+u
)/2;
y[1]:=q
-(v[1]+v
)/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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: