100 den tin hoc

Chia sẻ bởi Lê Phước Hoà | Ngày 16/10/2018 | 52

Chia sẻ tài liệu: 100 den tin hoc thuộc Tin học 9

Nội dung tài liệu:










100 đề Toán Tin
Tin học & Nhà trường
Phần 1: ĐỀ BÀI


Bài 1/1999 - Tổ chức tham quan
(Dành cho học sinh THCS)
Trong đợt tổ chức đi tham quan danh lam thắng cảnh của thành phố Hồ Chí Minh, Ban tổ chức hội thi Tin học trẻ tổ chức cho N đoàn ( đánh từ số 1 đến N) mỗi đoàn đi thăm quan một địa điểm khác nhau. Đoàn thứ i đi thăm địa điểm ở cách Khách sạn Hoàng Đế di km (i=1,2,...., N). Hội thi có M xe taxi đánh số từ 1 đến M (M(N) để phục vụ việc đưa các đoàn đi thăm quan. Xe thứ j có mức tiêu thụ xăng là vj đơn vị thể tích/km.
Yêu cầu: Hãy chọn N xe để phục vụ việc đưa các đoàn đi thăm quan, mỗi xe chỉ phục vụ một đoàn, sao cho tổng chi phí xăng cần sử dụng là ít nhất.
Dữ liệu: File văn bản P2.INP:
- Dòng đầu tiên chứa hai số nguyên dương N, M (N(M(200);
- Dòng thứ hai chứa các số nguyên dương d1, d2, ..., dN;
- Dòng thứ ba chứa các số nguyên dương v1, v2, ..., vM.
- Các số trên cùng một dòng được ghi khác nhau bởi dấu trắng.
Kết quả: Ghi ra file văn bản P2.OUT:
- Dòng đầu tiên chứa tổng lượng xăng dầu cần dùng cho việc đưa các đoàn đi thăm quan (không tính lượt về);
- Dòng thứ i trong số N dòng tiếp theo ghi chỉ số xe phục vụ đoàn i (i=1, 2, ..., N).

Ví dụ:
P2.INP

P2.OUT

3 4
7 5 9
17 13 15 10

256
2
3
4

Bài giải
Program bai1;
uses crt;
const fi = `P2.inp`;
fo = `P2.out`;
type _type=array[1..2] of integer;
mang=array[1..200] of _type;

var f:text;
d,v:mang;
m,n:byte;

procedure input;
var i:byte;
begin
assign(f,fi);
reset(f);
readln(f,n,m);
for i:=1 to n do
begin
read(f,d[i,1]);
d[i,2]:=i;
end;
readln(f);
for i:=1 to m do
begin
read(f,v[i,1]);
v[i,2]:=i;
end;
close(f);
end;

procedure sapxeptang(var m:mang;n:byte);
var d:_type;
i,j:byte;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if m[j,1]m[i,1] then
begin
d:=m[j];
m[j]:=m[i];
m[i]:=d;
end;
end;

var i:byte;
tong:integer;
begin
input;
sapxeptang(d,n);
sapxeptang(v,m);
tong:=0;
for i:=1 to n do tong:=tong+v[n-i+1,1]*d[i,1];
for i:=1 to n do v[i,1]:=d[n-i+1,2];
xapxeptang(v,n);
assign(f,fo);
rewrite(f);
writeln(f,tong);
for i:=1 to n do writeln(f,v[i,2]);
close(f);
end.

Nhận xét: Chương trình trên sẽ chạy chậm nếu chúng ta mở rộng bài toán (chẳng hạn n <= m <= 8000). Sau đây là cách giải khác:

const
Inp = `P2.INP`;
Out = `P2.OUT`;
var
n, m: Integer;
Val, Pos: array[1..2, 1..8000] of Integer;
procedure ReadInput;
var
i: Integer;
hf: Text;
begin
Assign(hf, Inp);
Reset(hf);
Readln(hf, n, m);
for i := 1 to n do Read(hf, Val[1,
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Lê Phước Hoà
Dung lượng: 3,93MB| Lượt tài: 0
Loại file: doc
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)