Có n ngôi làng được đánh số từ 1 đến n nằm trên một đường thẳng, ngôi làng thứ I nằm ở vị trí A i (1i Có một số ngôi làng có điện và những ngôi làng còn lại chưa có. Độ dài dây điện nối từ một ngôi làng i có điện đến ngôi làng j chưa có điện là . Yêu cầu: Tính tổng độ dài dây nối ít nhất để tất cả các ngôi làng đều có điện. Dữ liệu vào: tệp KEODIEN.inp có cấu trúc như sau: - Dòng đầu ghi số nguyên n (1n - Dòng thứ hai ghi A 1, A 2 , …,A n , (0A 1 <A 2 ,< …,<A n 1.000.000). - Dòng thứ ba ghi n số 0 hoặc 1 : nếu số thứ I là không nghĩa là làng này chưa có điện, ngược lại thì làng I đã có điện. Kết quả: ghi ra tệp KEODIEN.OUT ghi tổng độ dài dây nối ít nhất để mọi ngôi làng đều có điện. Ví dụ: KEODIEN.INP KEODIEN.OUT 3 5 1 5 6 1 0 0 pascal (bản ful -l part 3 :))))
2 câu trả lời
uses crt, math;
var a: array[0..1000000] of longint;
i, n, stt, s, m: longint;
res: int64;
c: boolean;
begin
readln(n);
for i:=1 to n do read(a[i]); read(stt);
c:=c or (stt = 1);
for i:=2 to n do begin
read(stt);
if c then m:=max(m, a[i] - a[i - 1]);
s:=s + a[i] - a[i - 1];
if stt = 1 then begin
res:=res + s - m;
c:=true;
s:=0; m:=0;
end;
end;
writeln(res + s);
readln;
end.
uses crt, math;
var a: array[0..1000000] of longint;
i, n, stt, s, m: longint;
res: int64;
c: boolean;
begin
readln(n);
for i:=1 to n do read(a[i]); read(stt);
c:=c or (stt = 1);
for i:=2 to n do begin
read(stt);
if c then m:=max(m, a[i] - a[i - 1]);
s:=s + a[i] - a[i - 1];
if stt = 1 then begin
res:=res + s - m;
c:=true;
s:=0; m:=0;
end;
end;
writeln(res + s);
readln;
end.
