永发信息网

pascal输油管道问题,请纠错

答案:2  悬赏:0  手机版
解决时间 2021-04-05 17:28
  • 提问者网友:箛茗
  • 2021-04-05 00:46
问题描述:
某石油公司计划建造一条由东向西的主输油管道。该管道要穿过一个有n 口油井的油
田。从每口油井都要有一条输油管道沿最短路经(或南或北)与主管道相连。如果给定n口油
井的位置,即它们的x 坐标(东西向)和y 坐标(南北向),应如何确定主管道的最优位置,
即使各油井到主管道之间的输油管道长度总和最小的位置?证明可在线性时间内确定主管道
的最优位置。
给定n 口油井的位置,计算各油井到主管道之间的输油管道最小长度总和。
输入的第1 行是油井数n,1<=n<=10000。接下来n 行是
油井的位置,每行2个整数x和y,-10000<=x,y<=10000。
输出油井到主管道之间的输油管道最小长度总和。
program ex8;
var
a:array[-10000..10000]of integer;
b:array[-10000..10000]of integer;
c:array[-10000..10000,-10000..10000]of integer;
i,j,temp,n,s,q:integer;
begin
readln(n);
for i:=1 to n do
read(a[i],b[i]);
s:=0;
for i:=-10000 to 10000 do
for j:=-10000 to 10000 do
begin
for q:=1 to n do
begin
s:=s+trunc(sqrt(sqr(i-a[q])+sqr(j-b[q])));
c[i,j]:=s;
end;
end;
temp:=c[1,1];
for i:=-10000 to 10000 do
for j:=-10000 to 10000 do
if c[i,j] writeln(temp);
end.
最佳答案
  • 五星知识达人网友:往事埋风中
  • 2021-04-05 01:56
数组开得太大了,c数组2*10^4*2*10^4=4*10^8,pascal顶多开1*10^8;
这道题用线性拟合
y=bx+a
令xx为x的平均值,yy为y平均值
b=sigma((xi-xx)*(yi-yy))/sigma((xi-xx)^2)
a=yy-bxx
这是高二必修三内容,是公式
xx:=0;
yy:=0;
for i:=1 to n do
begin
xx:=xx+x[i];
yy:=yy+y[i];
end;
if xx=0 then
begin
writeln(0);
halt; //直线,x全相等
end;
xx:=xx/n;
yy:=yy/n;
s1:=0;
s2:=0;
for i:=1 to n do
begin
s1:=s1+(x[i]-xx)*(y[i]-yy);
s2:=s2+(x[i]-xx)*(x[i]-xx)
end;
a:=s1/s2;
b:=yy-a*xx;
s:=0;
for i:=1 to n do
s:=s+abs((a*x[i]-y[i]+b)/sqrt(a*a+1));
writeln(s);
全部回答
  • 1楼网友:有你哪都是故乡
  • 2021-04-05 03:10
题目写下吧 因为我这边这道题目不清楚是不是你想要的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯