Tải bản đầy đủ (.doc) (6 trang)

De HSG Tin Yên Bái 2010-2011

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (126.32 KB, 6 trang )

SỞ 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 s
i
(1<= s
i
<= 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ụ:
PT.INP PT.OUT
4 5
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ụ:
XT.INP XT.OUT
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
1
ĐỀ CHÍNH THỨC
(Đề thi có 02 trang)
đườ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ố a
i
và b
i
(1<= a
i;
b
i
<=10000, i=1..n);

Trong đó: - a
i
, b
i
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 a
p
<a
q
, b
p
>b
q
hoặc
a
p
>a
q
, b
p
<b
q
(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ố a
i
,b

i
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ụ:
PD.INP PD.OUT
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
2
Bà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;
3
begin
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)
4
program 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
5

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×