đường, Chính phủ ra quyết định cần phải phá huỷ các tuyến đường cắt nhau giữa 2 thành phố.. Mỗi tuyến đường được hiển thị bởi 2 số ai và bi 1.
Trang 1SỞ GIÁO DỤC VÀ ĐÀO TẠO KỲ THI CHỌN HỌC SINH GIỎI
TỈNH YÊN BÁI LỚP 12 THPT NĂM HỌC 2010- 2011
Môn thi: Tin học Thời gian: 180 phút (không kể thời gian giao đề) Ngày thi: 10-10-2010
Bài 1(6 điểm): Cho một số tự nhiên N (1<=N<=120), người ta phân tích số N
thành các số tự nhiên si (1<= si<= N) có tổng bằng N Ví dụ N=4 ta có 5 cách phân tích:
Cách 1: 4 = 1+1 +1+1
Cách 2: 4 = 2 +1+1
Cách 3: 4= 2+2
Cách 4: 4= 3+1
Cách 5: 4= 4
Yêu cầu: Từ một số N cho trước, tìm số cách để phân tích như trên.
Dữ liệu vào: Từ file PT.INP có chứa giá trị N (1<=N<=120)
Kết quả ra: Ghi ra file PT.OUT chứa tổng số cách phân tích được.
Ví dụ:
Bài 2 (7 điểm): Để xây dựng một trường Đại học mới tại tỉnh A, UBND tỉnh
đã đưa ra n địa điểm và đánh số từ 1 đến n, sau đó chọn ra 1 địa điểm X để xây dựng trường Để tạo điều kiện cho sinh viên đến trường, người ta tiến hành làm mới 1 số tuyến đường sao cho đảm bảo các sinh viên đến trường đều đi qua đường mới xây dựng và tổng độ dài các quãng đường phải xây dựng mới là nhỏ nhất.
Yêu cầu: Hãy tính ra m là tổng số độ dài các quãng đường phải xây mới.
Dữ liệu vào: - Từ file XT.INP có dòng đầu là n, X, (0<n<=500, 0<X<=n),
các dòng kế tiếp mỗi dòng ghi 3 số A, B, C (mỗi số cách nhau một kí tự trắng) cho biết khoảng cách từ điểm A đến điểm B là C, (0<C<32000)
- Dữ liệu đảm bảo luôn có đường đi từ các điểm khác về điểm X
đã chọn
Kết quả ra: Ghi ra file XT.OUT gồm 1 số m.
Ví dụ:
4 2
2 1 15
2 3 8
2 4 20
3 4 6
29
Bài 3 (7 điểm): Tại quốc gia T đã có n (n<100) tuyến đường được xây dựng
giữa 2 thành phố A và B Để quy hoạch và xây dựng mới lại các tuyến
ĐỀ CHÍNH THỨC
(Đề thi có 02 trang)
Trang 2đường, Chính phủ ra quyết định cần phải phá huỷ các tuyến đường cắt nhau giữa 2 thành phố Mỗi tuyến đường được hiển thị bởi 2 số ai và bi (1<= ai;bi
<=10000, i=1 n);
Trong đó: - ai , bi tương ứng là 2 điểm nằm trên 2 thành phố.
- Hai tuyến đường p và q được gọi là cắt nhau khi ap<aq, bp>bq hoặc
ap>aq, bp<bq (1<=p,q<=n).
Yêu cầu: - Không còn 2 tuyến đường nào cắt nhau giữa 2 thành phố.
- Số tuyến đường cần phá bỏ là ít nhất.
Dữ liệu vào: File văn bản tên là PD.INP có cấu trúc như sau:
- Dòng đầu tiên là số nguyên dương n.
- n dòng tiếp theo mỗi dòng chứa 2 số ai ,bi là toạ độ tương ứng của n tuyến đường.
Kết quả ra: Xuất ra file văn bản PD.OUT với 1 số duy nhất là số lượng
tuyến đường cần phá.
Ví dụ:
4
4 3
6 8
7 8
7 1
2
HẾT
Họ và tên thí sinh: SBD Chữ ký của giám thị 1: Chữ ký của giám thị 2
(Giám thị không giải thích gì thêm)
ĐÁP ÁN: Đề thi chính thức Môn: Tin học lớp 12
Trang 3Bài 1: (6 điểm)
program bt1;
const fi='d:\bt1.txt';
fo='d:\bt1.out';
var a:array[1 120,0 120] of longint;
n:byte;
procedure input;
var f:text;
begin
assign(f,fi);
reset(f);
readln(f,n);
close(f);
end;
procedure pt;
var i,j,t:byte;
begin
for i:=1 to n do
for j:=1 to n do a[i,j]:=0;
for i:=1 to n do a[i,0]:=1;
for i:=1 to n do
for j:=1 to n do
if j<i then a[i,j]:=a[i-1,j]
else for t:=1 to i do a[i,j]:=a[i,j]+a[t,j-t]; end;
procedure output;
var f:text;
begin
assign (f,fo);
rewrite(f);
writeln(f,a[n,n]);
close(f);
end;
begin
input;
pt;
output;
end.
Bài 2: (7 điểm)
program bt2;
const fi='D:\bt2.txt';
fo='D:\bt2.out';
nmax=100;
vc=100;
var a:array[1 nmax,1 nmax] of 0 100;
d:array[1 nmax] of longint;
t,dd:array[1 nmax] of word;
f:text;
i,j,n,x,y,m,s,dmin:word;
tg,min:longint;
procedure nhap;
Trang 4begin
assign(f,fi); reset(f);
readln(f,n,s);
for i:=1 to n do
for j:=1 to n do a[i,j]:=vc;
for i:=1 to n do a[i,i]:=0;
while not(seekeof(f)) do
begin
readln(f,x,y,m); a[x,y]:=m; a[y,x]:=m;
end;
close(f);
end;
procedure dijstra;
begin
fillchar(dd,sizeof(dd),0);dd[s]:=1;t[s]:=s;d[s]:=0; for i:=1 to n do if i<>s then
begin
d[i]:=a[s,i];t[i]:=s;
end;
repeat
min:=VC;
for i:=1 to n do
if (dd[i]=0) and (d[i]<min) then
begin
min:=d[i];dmin:=i;
end;
if min<>VC then
begin
dd[dmin]:=1;
for i:=1 to n do
if (dd[i]=0) then
if d[i]>d[dmin]+a[dmin,i] then
begin
d[i]:=d[dmin]+a[dmin,i];t[i]:=dmin;
end;
end;
until min=vc;
end;
procedure vietkq;
begin
assign(f,fo);rewrite(f);
tg:=0;
for i:=1 to n do
if i<>s then tg:=tg+a[i,t[i]];
writeln(f,tg);
close(f);
end;
begin
nhap;
dijstra;
vietkq;
end
Bài 3: (7 điểm)
Trang 5program bt3;
const fi='d:\pd.txt';
fo='d:\pd.out';
type diem=record
x,y:integer;
end;
mdiem=array[1 100] of diem;
var a,b:mdiem;
c:array[0 100,0 100] of integer; n:byte;
procedure docfile;
var f:text;
i:integer;
t1,t2:integer;
begin
assign(f,fi);
reset (f);
readln(f,n);
for i:=1 to n do
begin
readln(f,t1,t2);
a[i].x:=t1;
b[i].x:=t2;
a[i].y:=i;
b[i].y:=i;
end;
close(f);
end;
procedure sapxep(var d:mdiem);
var tam:diem;
i,j:byte;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if d[i].x>d[j].x then
begin
tam:=d[i];
d[i]:=d[j];
d[j]:=tam;
end;
end;
function max(a,b:integer):integer; begin
if a>b then max:=a
else max:=b;
end;
procedure xuli;
var i,j:byte;
begin
sapxep(a);
sapxep(b);
for i:=0 to n do
begin
Trang 6c[i,0]:=0;
c[0,i]:=0;
end;
for i:=1 to n do
for j:=1 to n do
if a[i].y=b[j].y then
c[i,j]:=max(c[i-1,j],c[i,j-1])+1 else c[i,j]:=max(c[i-1,j],c[i,j-1]); end;
procedure ghifile;
var f:text;
begin
assign(f,fo);
rewrite(f);
write(f,n-c[n,n]);
close(f);
end;
begin
docfile;
xuli;
ghifile;
end