Đề thi đề nghị môn Tin học Lớp 11 Kỳ thi Olympic 23-3 Tỉnh ĐăkNông lần thứ 5 - Năm học 2017-2018 - Trường THPT Krông Nô

Câu 1: (6 điểm) (Đặt tên là Noixich.pas) 

            Người ta có N đoạn dây xích (N≤20000), mỗi đoạn dây xích là một chuỗi các mắt xích được nối với nhau. Các đoạn dây xích này tách rời nhau. Mỗi đoạn dây xích có không quá 20000 mắt xích.

Bằng cách cắt ra một mắt xích, sau đó hàn lại, ta có thể nối hai dây xích thành một đoạn. Thời gian cắt và hàn mỗi mắt xích là 1 đơn vị thời gian và được xem là bằng nhau với mọi mắt xích.

Nhiệm vụ của bạn là phải nối chúng lại thành một đoạn dây xích duy nhất với thời gian ít nhất (hay số mắt xích bị cắt ra và hàn lại là ít nhất).

Dữ liệu: Dữ liệu được cho trong file NOIXICH.INP có cấu trúc như sau:

  • Dòng đầu tiên ghi số N là số đoạn mắt xích
  • Những dòng tiếp theo ghi N số nguyên dương, số thứ i là số mắt xích có trong đoạn thứ i (1≤i≤N). Hai số cạnh nhau trên một dòng cách nhau ít nhất một dấu cách.

Kết quả: Chương trình của bạn cần đưa ra file NOIXICH.OUT một số duy nhất là số đơn vị thời gian để bạn cần để nối N đoạn xích đã cho.

Ví dụ: 

doc 10 trang Hữu Vượng 31/03/2023 8720
Bạn đang xem tài liệu "Đề thi đề nghị môn Tin học Lớp 11 Kỳ thi Olympic 23-3 Tỉnh ĐăkNông lần thứ 5 - Năm học 2017-2018 - Trường THPT Krông Nô", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • docde_thi_de_nghi_mon_tin_hoc_lop_11_ky_thi_olympic_23_3_tinh_d.doc

Nội dung text: Đề thi đề nghị môn Tin học Lớp 11 Kỳ thi Olympic 23-3 Tỉnh ĐăkNông lần thứ 5 - Năm học 2017-2018 - Trường THPT Krông Nô

  1. Mã số câu: Câu 2: (7 điểm) Số lớn nhất (Đặt tên là Somax.pas) Cho 2 số nguyên X=x1x2 xN và Y=y1y2 yM . Hãy tìm số Z = z1z2 zk (Z nhận được từ X và Y bằng cách xoá đi một số chữ số) lớn nhất . Ví dụ : X= 12345 ; Y= 435012 Thì Z=45 (nhận được từ X bằng cách xoá đi x 1 , x2 , x3 ; nhận được từ Y bằng cách xoá đi y2 , y4 , y5 , y6) * Dữ liệu vào cho bởi File Number.inp có cấu trúc như sau: - Dòng thứ nhất là X. - Dòng thứ hai là Y. * Dữ liệu đưa ra File Number.out có cấu trúc như sau: - Dòng đầu ghi số Z. Giới hạn : M,N < 201. Ví dụ: Number.inp Number.out 12345 45 435012 12345 123 4351023 Chấm theo test, mỗi test đúng được 01 điểm Test Number.inp Number.out 12345 45 1 435012 12345 123 2 4351023 99999999000 0 3 87654321000 1234567890123456789 989 4 9876543210987654321 1234567890123456789012345678901234567890123456789 989898989 5 9876543210987654321098765432109876543210987654321 84234023409472307507230707075903720372 2323947357303732 6 31238213719894857439573406384273111111111244 23474293847983712938954509480 4723779040 7 4350372103710790640 Chương trình tham khảo {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R+,S+,T-,V+,X+} {$M 16384,0,655360} const max =250; fi ='Number.inp'; fo ='Number.out'; var l :array[1 max+1,1 max+1]of byte; a,b,c :string; procedure docf; var f :text; begin assign(f,fi); reset(f); readln(f,a);readln(f,b);
  2. Mã số câu: Câu 3: (7 điểm) (Đặt tên: Timduong.pas) Tìm đường đi Huyện Đăk R’Lấp có N xã, giữa các xã có thể có hoặc không có đường đi trực tiếp đến nhau. Các đường đi trực tiếp này được xác định bởi trọng số A[i,j] (là độ dài đường đi trực tiếp từ xã i đến xã j và ngược lại) và có M đường đi trực tiếp như vậy. Em hãy lập trình để tìm đường đi ngắn nhất (nếu có) từ xã x đến xã y trong huyện. Dữ liệu vào: Lấy từ một file văn bản có tên là TIMDUONG.INP có cấu trúc như sau: Dòng đầu là bốn số N, M, x, y cách nhau bởi dấu cách. M dòng tiếp theo, mỗi dòng ghi 3 số i, j, A[i,j]. Dữ liệu ra: Ghi ra file văn bản TIMDUONG.OUT Nếu không tìm được đường đi từ x đến y thì ghi: -1 Nếu tìm được đường đi ngắn nhất thì ghi trên 2 dòng: o Dòng đầu là Độ dài đường đi ngắn nhất o Dòng thứ 2 là hành trình từ x đến y. Ví dụ: TIMDUONG.INP TIMDUONG.OUT TIMDUONG.INP TIMDUONG.OUT 6 4 1 3 -1 6 9 1 3 10 1 2 3 1 2 3 1 2 6 4 3 2 6 4 2 6 4 4 5 7 4 5 7 3 4 1 3 4 1 2 3 9 3 6 6 6 4 2 4 1 10 2 5 2 Chấm theo test, mỗi test đúng được 01 điểm Test TIMDUONG.INP TIMDUONG.OUT 6 4 1 3 -1 1 2 3 1 2 6 4 4 5 7 3 4 1 6 9 1 3 10 1 2 3 1 2 6 4 3 2 6 4 4 5 7 3 4 1 2 2 3 9 3 6 6 6 4 2 4 1 10 2 5 2 6 9 2 4 6 1 2 3 2 6 4 3 2 6 4 4 5 7 3 4 1
  3. max=100; vc=100*50*maxint; type m1=array[1 max,1 max] of longint; m2=array[1 max] of longint; m3=array[1 max] of byte; var a : m1; v : m2; t,d: m3; m : Integer; n,x,y: Byte; procedure Read_input; var i,j:byte; k,w: integer; f: text; Begin assign(f,fi); reset(f); fillchar(a,sizeof(a),0); read(f,n,m,x,y); for k:=1 to m do begin readln(f,i,j,w); a[i,j]:=w; a[j,i]:=w; end; close(f); End; procedure init; var i,j: byte; begin for i:=1 to n do for j:=1 to n do if a[i,j]=0 then a[i,j]:=vc; fillchar(d,sizeof(d),0); for i:=1 to n do v[i]:= a[x,i]; v[x]:=0; fillchar(t, sizeof(t),0); end; function Find_vmin: byte; var li,i: byte; p: longint; begin li:=0; p:=vc; for i:=1 to n do if d[i]=0 then if v[i]<p then begin p:=v[i]; li:=i; end; find_vmin:=li; end; procedure Repair(i:byte); var j: byte; begin