1. Trang chủ
  2. » Giáo án - Bài giảng

Download đề và đáp án thi học sinh giỏi lớp 12 môn tin học 2004 2005 tỉnh quảng bình (2 vòng)

15 411 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 15
Dung lượng 159,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

hớng dẫn chấm vòng 1 I/ Ph ơng pháp chung - Giám khảo tạo các bộ dữ liệu vào, tính toán kết quả.. - Giám khảo có thể sử dụng chơng trình mẫu để tính kết quả của dữ liệu vào: SO.PAS DAYSO

Trang 1

Vòng 1

Câu 1: (3 điểm) Phân tích số Tên file bài làm: SO.PAS

Hãy phân tích số nguyên dơng N thành tổng các số nguyên dơng khác nhau sao cho tích của chúng là lớn nhất

Dữ liệu vào: Cho trong file SO.INP có cấu trúc nh sau:

Dòng 1: Ghi số N (1<N<32768)

Dữ liệu ra: Ghi ra file SO.OUT theo cấu trúc nh sau:

Dòng 1: Ghi số K là số lợng số hạng của cách phân tích

Dòng 2: Ghi K số hạng của cách phân tích theo thứ tự tăng dần Các số ghi cách nhau ít nhất một dấu cách

Ví dụ:

2 4 5 6

Câu 2: (3.5 điểm) Sắp xếp dãy số Tên file bài làm: DAYSO.PAS

Cho dãy số nguyên a1 ,a2 , , an (1<n<=1000; -32768<=ai <=32767) Hãy tìm cách thực hiện một số ít nhất phép đổi chỗ hai số hạng bất kỳ của dãy để thu đợc dãy số

mà số lẽ đứng ở vị trí lẽ, số chẵn đứng ở vị trí chẵn

Dữ liệu vào: Cho trong file DAYSO.INP có cấu trúc nh sau:

Dòng 1: Ghi số n (là số lợng các số trong dãy)

Dòng 2: Ghi n số ai Các số ghi cách nhau ít nhất một dấu cách

Dữ liệu ra: Ghi ra file DAYSO.OUT theo cấu trúc nh sau:

Dòng 1: Nếu không đổi đợc thì ghi -1

Nếu đổi đợc thì ghi số K là số lợng phép đổi chỗ cần thực hiện và K dòng tiếp theo: Mỗi dòng j ghi 2 số j1 j2 là chỉ số của hai số hạng cần đổi chỗ cho nhau ở lần

đổi chỗ thứ j Hai số j1 j2 ghi cách nhau ít nhất một dấu cách

Ví dụ:

1 2 3 4 6 5 5 6 1 3 2 5

Chú ý: Có thể có nhiều cách đổi chỗ, chỉ cần đa ra một cách đổi chỗ đúng.

Trang 2

Câu 3: (3.5 điểm) Xếp hàng mua vé Tên file bài làm: TICK.PAS

Có N ngời (N nguyên, 1<N<=100) có tên là 1 N xếp hàng mua vé theo thứ tự ngời

có tên nhỏ hơn thì xếp trớc (và đợc mua trớc) Mỗi ngời chỉ đợc mua 1 vé cho mình

và có thể mua thêm 1 vé cho ngời đứng kế sau Ngời bán vé chỉ bán cho mỗi ngời không quá 2 vé Biết Ti là thời gian để ngời thứ i mua vé của mình (0<Ti<100, i=1 N) Nếu ngời i+1 nhờ ngời i mua hộ vé của mình thì thời gian để ngời i mua vé cho cả hai ngời là Ri (0<Ri<100, i=1 N-1)

Yêu cầu: Hãy xét xem ngời nào cần đứng lại mua vé, ngời nào cần rời khỏi hàng

và nhờ ngời đứng ngay trớc mình mua hộ vé sao cho tổng thời gian bán đủ vé cho N ngời

là nhỏ nhất

Dữ liệu vào: Cho trong file TICK.INP có cấu trúc nh sau:

Dòng 1: Ghi số N

Dòng 2: Ghi N số nguyên dơng Ti Các số ghi cách nhau ít nhất 1 dấu cách

Dòng 3: Ghi N-1 số nguyên dơng Ri Các số ghi cách nhau ít nhất 1 dấu cách

Dữ liệu ra: Ghi ra file TICK.OUT theo cấu trúc nh sau:

Dòng 1: Ghi số S là tổng thời gian bán vé nhỏ nhất tìm đợc

Dòng 2: Ghi tên các ngời còn ở lại trong hàng để mua vé theo thứ tự giảm dần

Ví dụ:

5

3 6 2 7 3

4 8 4 8

11

5 3 1

Lu ý: Trong trờng hợp có nhiều kết quả đúng, chỉ cần đa ra đợc một kết quả.

Trang 3

hớng dẫn chấm vòng 1

I/ Ph ơng pháp chung

- Giám khảo tạo các bộ dữ liệu vào, tính toán kết quả Chạy chơng trình của học sinh và

so sánh kết quả

- Giám khảo có thể sử dụng chơng trình mẫu để tính kết quả của dữ liệu vào: SO.PAS DAYSO.PAS TICK.PAS

- Chơng trình học sinh chạy đúng mỗi bộ test, giám khảo cho 0.5 điểm Nh vậy, nếu câu hỏi có 3 điểm thì giám khảo phải tạo đợc 6 bộ test

-Nếu chơng trình chạy sai test nào thì giám khảo cho 0 điểm đối với test đó

- Bài toán có thể có nhiều kết quả đúng, nếu kết quả của học sinh khác với đáp án nhng vẫn đúng thì giám khảo vẫn cho điểm tối đa

- Giám khảo có thể sử dụng các test gợi ý dới đây nếu cần thiết

II/ Ch ơng trình mẫu

SO.PAS

{$r+}

const fi='so.in6'; fo='so.ou6';

type mmc=array[1 1000] of word;

var n,spt:word; a:mmc;

procedure doc;

var f:text;

begin

end;

procedure xl;

var i:word;

begin

i:=1;

while n>i+1 do

begin a[i]:=i+1; n:=n-(i+1); i:=i+1; end;

spt:=i-1;

while n>0 do

begin

i:=spt;

while (n>0) and (i>=1) do begin a[i]:=a[i]+1;n:=n-1;i:=i-1;end;

end;

end;

procedure xuat;

var f:text; i:word; tich:longint;

begin

assign(f,fo);rewrite(f); writeln(f,spt);

for i:=1 to spt do write(f,a[i],' ');

close(f);

end;

begin doc; xl; xuat; {readln;} end.

DAYSO.PAS

{$r+}

const fi='dayso.in7'; fo='dayso.ou7';

type mmc=array[0 10001] of integer;

var a,mcl,mlc:mmc; n:word;

procedure doc;

var f:text; i:word;

begin

Trang 4

for i:=1 to n do read(f,a[i]);

close(f);

end;

procedure xl;

var i,lc,cl:word; f:text;

begin

lc:=0;cl:=0;

for i:=1 to n do

begin

if (i mod 2=0) and (a[i] mod 2<>0) then

begin lc:=lc+1; mlc[lc]:=i; end;

if (i mod 2<>0) and (a[i] mod 2=0) then

begin cl:=cl+1; mcl[cl]:=i; end;

end;

assign(f,fo);rewrite(f);

if lc=cl then

begin

writeln(f,cl);

for i:=1 to cl do writeln(f,mcl[i],' ',mlc[i]);

end

else writeln(f,-1);

close(f);

end;

begin doc; xl; end.

TICK.PAS

const maxn=100; fi='tick.in8'; fo='tick.ou8';

type mmc=array[1 maxn] of word;

var r,t,c:mmc;s:word; n:word;f:text;

procedure doc;

var i:word;

begin

assign(f,fi);reset(f); readln(f,n);

for i:=1 to n do read(f,t[i]); readln(f);

for i:=1 to n-1 do read(f,r[i]);

close(f);

end;

function min(a,b:word):word;

begin if a<b then min:=a else min:=b; end;

procedure xl;

var i:word;

begin

fillchar(c,sizeof(c),0); c[1]:=t[1];c[2]:=min(c[1]+t[2],r[1]);

for i:=3 to n do

c[i]:=min(c[i-1]+t[i],c[i-2]+r[i-1]);

end;

procedure xuat;

var i:word;

begin

assign(f,fo);rewrite(f);

i:=n;s:=c[i];writeln(f,s);

while i>2 do

if s=c[i-1]+t[i] then

begin write(f,i,' '); i:=i-1;s:=c[i]; end else

begin write(f,i-1,' '); i:=i-2;s:=c[i]; end; write(f,1); close(f);

end;

begin doc; xl; xuat; {readln;} end.

Trang 5

III/ Một số test gợi ý.

SO.PAS

2 3 5

3 4 6 7

2 3 4 6 7 8

2 3 5 6 7 8 9 10 11 12 13 14

2 3 4 5 6 7 9 10 11 12 13 14 15

2 3 4 6

DAYSO.PAS

12

5 -3 7 5 3 4 6 4 2 1 2 2

3

7 2

9 4

11 10 12

4 3 7 5 3 4 6 4 2 1 2 2 -1

8

1 2 3 10 9 8 7 6

0

8

8

6

2

2 1

1

1 2

Giám khảo lu ý khi sử dụng các test để chấm bài

+ Số phép đổi chỗ của học sinh bắt buộc phải giống đáp án.

+ Trình tự đổi chỗ có thể có nhiều cách khác nhau

Trang 6

20

4 5 7 4 3 1 4 5 6 3 8 6 2 7 8 5 3 4 6 7

8 3 4 5 2 6 7 8 6 6 7 3 2 5 6 8 7 9 10

58

19 18 17 15 13 11 9 7 6 4 2 1

3

3 2 1

1 2

2

3 1

10

8 9 6 7 4 5 2 3 1 1

1 1 3 2 5 4 7 6 8

16

10 9 8 7 5 3 1

12

4 6 6 2 7 8 5 3 4 6 7 12

8 3 4 5 2 6 7 8 6 8 9

33

11 9 7 5 4 2 1

10

2 2 2 2 2 2 2 2 2 2

2 2 2 2 2 2 2 2 2

10

9 7 5 3 1

5

1 2 3 4 5

5 4 3 2

7

4 2 1

5

1 2 3 4 5

1 2 3 4

7

4 2 1

Giám khảo lu ý khi sử dụng các test để chấm bài

+ Tổng thời gian bán vé của học sinh bắt buộc phải giống đáp án.

+ Tên của ngời ở lại trong hàng có thể có nhiều cách khác nhau

Trang 7

Vòng 2

Câu 1: (3.5 điểm) Chia bánh Tên file bài làm: CAKE.PAS

Trong buổi tối trung thu có một cái bánh hình tròn Bánh đợc viền quanh bởi N quả dâu và quả sim (1<N<=255) Tìm cách cắt bánh bằng một nhát dao để đợc hai phần sao cho số lợng quả dâu ở phần này bằng số lợng quả dâu ở phần kia và số lợng quả sim

ở phần này bằng số lợng quả sim ở phần kia

Dữ liệu vào: Cho trong file CAKE.INP có cấu trúc nh sau:

Dòng 1: Ghi số N là số lợng quả dâu và quả sim ở trên viền bánh

Dòng 2: Ghi dãy gồm N ký tự “D” hoặc “S” ghi liền nhau Các vị trí gắn quả trên bánh

đợc đánh số từ 1 đến N theo chiều kim đồng hồ bắt đầu từ một vị trí tuỳ ý

Dữ liệu ra: Ghi ra file CAKE.OUT có cấu trúc nh sau:

Dòng 1: Nếu không tìm đợc cách chia thì ghi số -1

Nếu tìm đợc cách chia thì ghi hai số nguyên dơng a, b (a<b) cho biết các quả ở vị trí a, a+1, , b là các quả thuộc cùng một trong hai phần bánh

Ví dụ:

Chú ý: Có thể có nhiều cách chia bánh, chỉ cần đa ra một cách chia đúng.

Câu 2: (3.5 điểm) Mật khẩu Tên file bài làm: PASS.PAS

Một nhóm gồm K học sinh (0<k<101) góp tiền mua một phần mềm dùng chung Khi cài đặt phần mềm này, ngời sử dụng phải nhập vào mật khẩu Khi biết các khách hàng là học sinh say mê Tin học, chủ cửa hàng đã đa cho mỗi học sinh i một con số xi

(1<=xi <=65535) và nói rằng “Mật khẩu để cài đặt là số nguyên dơng lớn nhất m mà tất cả các số tôi đã đa cho các bạn đều chia hết cho m”

Yêu cầu: Biết tất cả các số mà chủ cửa hàng đã đa cho các học sinh, hãy tìm mật khẩu

để cài đặt phần mềm

Dữ liệu vào: Cho trong file PASS.INP có cấu trúc nh sau:

Dòng 1: Ghi số K là số học sinh

Trang 8

Dòng 2: Ghi K số nguyên dơng xi (i=1 k) mà ông chủ đã đa cho các học sinh, các số ghi cách nhau ít nhất một dấu cách

Dữ liệu ra: Ghi ra file PASS.OUT theo cấu trúc nh sau:

Dòng 1: Ghi số m là mật khẩu tìm đợc

Ví dụ:

30 75 60

Câu 3: (3 điểm) Lập lịch gia công trên hai máy Tên file bài làm: LICH.PAS

Có N chi tiết D1 D2 Dn (1<N<1001) Mỗi chi tiết trong N chi tiết cần phải đợc lần lợt gia công trên cả 2 máy A và B Bắt đầu gia công trên máy A, sau khi xong chuyển tiếp sang gia công trên máy B Giả thiết thời gian chuyển xem nh không đáng kể và hai máy A, B là cùng hoạt động song song Thời gian gia công chi tiết Di trên máy A là ai, trên máy B là bi (i=1 n) Hãy tìm trình tự gia công các chi tiết trên hai máy sao cho việc hoàn thành gia công tất cả N chi tiết là sớm nhất có thể đợc

Dữ liệu vào: Cho trong file LICH.INP có cấu trúc nh sau:

Dòng 1: Ghi số N (là số lợng chi tiết)

Dòng 2: Ghi N số ai (là thời gian gia công chi tiết Di trên máy A; 0<=ai<=32767)

Dòng 3: Ghi N số bi (là thời gian gia công chi tiết Di trên máy B; 0<=bi<=32767)

Dữ liệu ra: Ghi ra file LICH.OUT theo cấu trúc nh sau:

Dòng 1: Ghi thời gian hoàn thành sớm nhất tìm đợc

Dòng 2: Ghi N số là chỉ số của các chi tiết theo trình tự tìm đợc

Ví dụ

5

3 4 6 5 6

3 3 2 7 3

26

1 4 2 5 3

Chú ý: Có thể có nhiều cách sắp xếp trình tự gia công, chỉ cần đa ra một cách đúng.

Trang 9

hớng dẫn chấm vòng 2

I/ Ph ơng pháp chung

- Giám khảo tạo các bộ dữ liệu vào, tính toán kết quả Chạy chơng trình của học sinh và

so sánh kết quả

- Giám khảo có thể sử dụng chơng trình mẫu để tính kết quả của dữ liệu vào CAKE.PAS PASS.PAS LICH.PAS

- Chơng trình học sinh chạy đúng mỗi bộ test, giám khảo cho 0.5 điểm Nh vậy, nếu câu hỏi có 3 điểm thì giám khảo phải tạo đợc 6 bộ test

- Nếu chơng trình chạy sai test nào thì giám khảo cho 0 điểm đối với test đó

- Bài toán có thể có nhiều kết quả đúng, nếu kết quả của học sinh khác với đáp án nhng vẫn đúng thì giám khảo vẫn cho điểm tối đa

- Giám khảo có thể sử dụng các test gợi ý dới đây

II/ Ch ơng trình mẫu

CAKE.PAS

const fi='cake.in7'; fo='cake.ou7';

var s:string;n:integer;

procedure doc;

var f:text;

begin

assign(f,fi);reset(f);readln(f,n);readln(f,s);close(f);

end;

procedure demdn(s:string;var sd,sn:integer);

var i:integer;

begin

sd:=0;sn:=0;

for i:=1 to length(s) do

if s[i]='D' then sd:=sd+1 else sn:=sn+1;

end;

procedure xl;

var i, x:word;

f:text; d,c,ds,ns,ds1,ns1:integer; s1,s2:string;

begin

assign(f,fo);rewrite(f);

x:=n div 2;

if n mod 2=1 then write(f,-1)

else

begin

demdn(s,ds,ns);

if (ds mod 2=1) or (ns mod 2=1) then write(f,-1)

else

begin

for i:=1 to x do

begin

s2:=s; s1:=copy(s2,i,x); delete(s2,i,x); demdn(s1,ds1,ns1);

if (ds1=ds div 2) and (ns1=ns div 2) then

begin write(f,i,' ',i+x-1); break; end;

end;

end;

end;

Trang 10

end;

begin doc; xl; end.

PASS.PAS

const fi='pass.in7'; fo='pass.ou7';

type mmc=array[1 101] of word;

var f:text; k:word; a:mmc;

procedure doc;

var i:word;

begin

assign(f,fi);reset(f); readln(f,k);

for i:=1 to k do read(f,a[i]);

close(f);

end;

function ucln(a,b:word):word;

begin

while a<>b do

begin if a>b then a:=a-b else b:=b-a; end;

ucln:=a;

end;

procedure xl;

var u,i:word;

begin

u:=a[1];

for i:=2 to k do u:=ucln(u,a[i]);

assign(f,fo);rewrite(f);write(f,u);close(f);

end;

begin

doc;xl;end.

LICH.PAS

var a: m1;

procedure doc_inp;

var f:text; i:integer;

begin

assign(f,fi);reset(f); readln(f,n);

for i:=1 to n do read(f,a[1,i]);

for i:=1 to n do read(f,a[2,i]);

close(f);

end;

function chitietmin(var may: byte): byte;

var i,j,chitiet:word;

begin

lmin := maxint;

for i:=1 to 2 do

for j:=n downto 1 do

if not dx[j] then

if (a[i,j]<lmin) then

begin may := i; chitiet:= j; lmin := a[i,j]; end; chitietmin := chitiet;

end;

procedure john;

var may,chitiet,dau,cuoi: byte;

Trang 11

begin

fillchar(dx,sizeof(dx),false);

dau := 0; cuoi := n+1;

repeat

chitiet := chitietmin(may);

if may=1 then

begin

inc(dau); kq[dau]:= chitiet; dx[chitiet]:= true;

end

else

begin

dec(cuoi); kq[cuoi] := chitiet; dx[chitiet]:= true; end;

until dau = cuoi-1;

end;

procedure hien;

var i:integer;

begin for i:=1 to n do write(g,kq[i],' '); end;

function max2(a,b: real): real;

begin if a>b then max2:=a else max2:=b; end;

procedure tinh;

begin

t1:=0; t2:=0;

for i:=1 to n do

begin

t1 := t1 + a[1,kq[i]]; t2 := max2(t1,t2)+a[2,kq[i]];

end;

writeln(g,t2:0:0);

end;

III/ Một số test gợi ý.

CAKE.PAS

10

DDSDDDSDSS

3 7

20

30

SDSDDDDDSSSSDDDSDDDDSSDDDSSSDD 1 15

10

16

DDDDDDDDDDDDDDDD

1 8

4

4

Giám khảo lu ý khi sử dụng các test để chấm bài: Có thể có nhiều cách cắt đúng khác nhau Trên đây chỉ đa ra một cách cắt dúng

Trang 12

10

25 35 75 5 20 40 50 125 55 45

5

20

3874 33314 49912 37822 14374 39488 24048 41264 25178

52384 34534 56834 35916 28756 34526 25506 21342 61186

57498 48510

2

30

1611 9 129 9 27 195 825 54 279 192 93 552 840 2790 72 45

2808 228 99 45 225 90 903 270 621 426 2604 522 18 99

3

8

2

10

1 1 1 1 1 1 1 1 1 1

1

10

LICH.PAS

5

3 4 6 5 6

3 3 2 7 3

26

1 4 2 5 3

10

3 4 6 5 6 7 6 5 4 8

3 3 2 7 3 8 7 5 7 4

56

1 9 8 4 7 6 10 2 5 3

15

3 4 6 5 6 4 6 3 2 6 7 8 7 5 3

3 3 2 7 3 8 7 3 2 6 7 5 3 2 1

76

9 8 1 6 4 10 7 11 12 2 5 13 3 14 15

2

1 2

2 1

4

1 2

2

1 2

1 2

5

1 2

10

6 5 3 4 5 4 1 6 5 6

1 2 4 5 3 3 2 7 3 8

46

7 3 4 10 8 5 6 9 2 1

Giám khảo lu ý khi sử dụng các test để chấm bài

+ Tổng thời gian ít nhất để hoàn thành gia công N chi tiết phải giống đáp án + Trình tự gia công có thể có nhiều cách khác nhau.

Trang 13

Đề thi dự bị Vòng 1

Câu 1: (3 điểm) Luỹ thừa Tên file bài làm: LT.PAS

Viết chơng trình tính 2n với n chạy từ 1 đến 96 Kết quả đặt trong file LT.TXT có cấu trúc nh sau:

N dòng: Dòng thứ i ghi giá trị tính đợc của 2i

Câu 2: (3.5 điểm) Hoán vị nhỏ nhất Tên file bài làm: PER.PAS

Cho a là một hoán vị của các số tự nhiên 1 N (3<=N<=50) Tìm hoán vị nhỏ nhất b của 1 N thoả mãn điều kiện: Độ lệch của các phần tử tơng ứng giữa a và b là không quá 1 đơn vị

Dữ liệu vào: Cho trong file PER.INP có cấu trúc nh sau:

Dòng 1: Ghi số N

Dòng 2: Ghi N số xi (1<=xi<=N) là hoán vị của các số tự nhiên từ 1 đến N Các số ghi cách nhau ít nhất một dấu cách

Dữ liệu ra: Ghi ra file PER.OUT theo cấu trúc nh sau:

Dòng 1: Ghi N số yi (1<=yi<=N) là hoán vị nhỏ nhất b tìm đợc Các số ghi cách nhau

ít nhất một dấu cách

Ví dụ

7 5 6 8 4 1 3 2 Câu 3: (3.5 điểm) Mã Gray Tên file bài làm: GRAY.PAS

Mã Gray G(N) của một số tự nhiên N là một số tự nhiên P đợc xác định nh sau: -Viết N dới dạng nhị phân C

-Dịch C sang phải 1 bít (Bỏ bít đầu phải, thêm bít 0 vào đầu trái)

-Gọi số thu đợc là D

-Thực hiện phép XOR theo bít giữa C và D để thu đợc số nhị phân K

-Chuyển K sang dạng thập phân để thu đợc số P

Khi đó ta có: G(N)=P

(Phép XOR giữa hai bít a và b cho ta giá trị 0 nếu 2 bít giống nhau, cho ta giá trị 1 nếu 2 bít khác nhau)

Yêu cầu: Tính N khi biết P (0<=P<=2000000000)

Dữ liệu vào: Cho trong file GRAY.INP có cấu trúc nh sau:

Dòng 1: Ghi số P

Dữ liệu ra: Ghi ra file GRAY.OUT theo cấu trúc nh sau:

Dòng 1: Ghi số N

Ví dụ

Ngày đăng: 11/10/2015, 13:33

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w