比赛 |
20111107 |
评测结果 |
AAAAAAAAAA |
题目名称 |
燃烧 |
最终得分 |
100 |
用户昵称 |
Des. |
运行时间 |
0.000 s |
代码语言 |
Pascal |
内存使用 |
0.00 MiB |
提交时间 |
2011-11-07 11:29:16 |
显示代码纯文本
program firez;
uses math;
var x1,x2,y1,y2,c:array[1..40]of longint;
t,k,m,n,i,j,z:longint;
a,d:array[1..200,1..200]of real;
b:array[1..200]of boolean;
x,y:array[1..200]of longint;
bo:array[-200..200,-200..200]of longint;
p:array[1..200]of boolean;
f:array[1..200]of real;
s:real;
begin
assign(input,'firez.in');
reset(input);
assign(output,'firez.out');
rewrite(output);
readln(n);
fillchar(bo,sizeof(bo),0);
fillchar(p,sizeof(p),false);
for t:=1 to n do
begin
readln(x1[t],y1[t],x2[t],y2[t],c[t]);
if (bo[x1[t],y1[t]]=0)and(bo[x2[t],y2[t]]=0) then
begin
a[z+1,z+2]:=c[t];
a[z+2,z+1]:=c[t];
x[z+1]:=x1[t];
y[z+1]:=y1[t];
x[z+2]:=x2[t];
y[z+2]:=y2[t];
bo[x1[t],y1[t]]:=z+1;
bo[x2[t],y2[t]]:=z+2;
z:=z+2;
end
else if bo[x1[t],y1[t]]=0 then
begin
k:=bo[x2[t],y2[t]];
a[z+1,k]:=c[t];
a[k,z+1]:=c[t];
x[z+1]:=x1[t];
x[z+2]:=y1[t];
bo[x1[t],y1[t]]:=z+1;
inc(z);
end
else if bo[x2[t],y2[t]]=0 then
begin
k:=bo[x1[t],y1[t]];
a[z+1,k]:=c[t];
a[k,z+1]:=c[t];
x[z+1]:=x2[t];
y[z+1]:=y2[t];
bo[x2[t],y2[t]]:=z+1;
inc(z);
end
else
begin
i:=bo[x1[t],y1[t]];
j:=bo[x2[t],y2[t]];
a[i,j]:=c[t];
a[j,i]:=c[t];
end;
p[bo[x1[t],y1[t]]]:=true;
p[bo[x2[t],y2[t]]]:=true;
end;
fillchar(b,sizeof(b),false);
for t:=1 to n do
for k:=t+1 to n do
if (max(x1[t],x2[t])=max(x1[k],x2[k]))
and(max(y1[t],y2[t])=max(y1[k],y2[k]))
and(abs(x2[t]-x1[t])+abs(y2[t]-y1[t])=2)
and(abs(x2[k]-x1[k])+abs(y2[k]-y1[k])=2) then
begin
inc(z);
i:=bo[x1[t],y1[t]];
j:=bo[x2[t],y2[t]];
a[z,i]:=a[i,j]/2;
a[i,z]:=a[z,i];
a[z,j]:=a[i,z];
a[j,z]:=a[i,z];
i:=bo[x1[k],y1[k]];
j:=bo[x2[k],y2[k]];
a[z,i]:=a[i,j]/2;
a[i,z]:=a[z,i];
a[j,z]:=a[z,i];
a[z,j]:=a[z,i];
end;
for i:=1 to z do
for j:=1 to z do
d[i,j]:=a[i,j];
for k:=1 to z do
for i:=1 to z do
for j:=1 to z do
if (i<>k)and(j<>k)and(i<>j)and(a[i,k]>0)and(a[k,j]>0)
and((a[i,k]+a[k,j]<a[i,j])or(a[i,j]=0)) then
a[i,j]:=a[i,k]+a[k,j];
for i:=1 to z do
if p[i] then
for j:=1 to n do
begin
t:=bo[x1[j],y1[j]];
k:=bo[x2[j],y2[j]];
if abs(a[i,t]-a[i,k])=d[t,k] then s:=max(a[i,t],a[i,k])
else s:=max(a[i,t],a[i,k])+((d[t,k]-abs(a[i,t]-a[i,k]))/2);
if s>f[i] then f[i]:=s;
end;
s:=maxlongint;
for i:=1 to z do
if (p[i])and(f[i]<s) then
s:=f[i];
writeln(s:0:4);
close(output);
end.