1. Trang chủ
  2. » Giáo Dục - Đào Tạo

ĐỀ THI HỌC SINH GIỎI MÔN TIN HỌC

7 7 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 87 KB

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

Nội dung

Tổng quan bài thi: trình File dữ liệu vào File kết quả Bài 3 Dãy ngoặc đúng phân biệt BAI3.PAS BAI3.INP BAI3.OUT Bài 4 Dãy con có tổng lớn nhất BAI4.PAS BAI4.PAS BAI4.PAS Dữ liệu vào l

Trang 1

SỞ GD VÀ ĐT THANH HOÁ

TRƯỜNG THPT HOẰNG HÓA 2

THI KHẢO SÁT CHẤT LƯỢNG HỌC SINH GIỎI

Năm học: 2020-2021 Môn thi: Tin học

Ngày thi: ………….

Thời gian: 180 phút (không kể thời gian giao đề)

Đề này có 05 bài, gồm 03 trang.

Tổng quan bài thi:

trình File dữ liệu vào File kết quả

Bài 3 Dãy ngoặc đúng phân biệt BAI3.PAS BAI3.INP BAI3.OUT

Bài 4 Dãy con có tổng lớn nhất BAI4.PAS BAI4.PAS BAI4.PAS

Dữ liệu vào là đúng đắn, không cần phải kiểm tra.

Hãy lập trình giải các bài toán sau:

Bài 1: (5 điểm) Trông xe

Một bãi đỗ xe nhận trông xe trong vòng một tháng Mỗi xe sẽ được gắn một số hiệu là một số nguyên dương T (10102010 ≤ T ≤ 10109999) Hai xe khác nhau sẽ được gắn hai số hiệu khác nhau Một xe có thể ra vào bãi đỗ xe nhiều lần, mỗi lần vào bãi đỗ

xe, người trông xe sẽ ghi vào sổ sách số hiệu của chiếc xe đó Cuối tháng dựa vào sổ ghi chép, người trông xe làm thống kê về số lần vào bãi đỗ xe của từng chiếc xe để tiến hành thu phí Nếu một chiếc xe vào bãi đỗ xe P lần, cuối tháng chủ xe phải trả một lượng phí C được tính như sau:

5

5 )

5 ( 100

100

>

− +

=

p

p nêu

nêu p

C

Yêu cầu: Tính tổng số phí người trông xe thu được vào cuối tháng

Dữ liệu vào: File văn bản BAI1.INP gồm:

- Dòng đầu chứa một số nguyên dương K (0 < K ≤ 10)

- K dòng tiếp theo, mỗi dòng chứa số hiệu một chiếc xe.

Dữ liệu ra: File văn bản BAI1.OUT có 1 số nguyên, là tổng phí thu được.

Ví dụ:

Trang 2

7 10102010 10108888 10102010 10102010 10102010 10102010 10102010

210

Bài 2: (5 điểm) Số lớn nhất

Với số nguyên dương N cho trước ở hệ thập phân người ta có thể tạo ra những số nguyên khác nhau bằng cách hoán vị các chữ số của N Ví dụ, với N=133, ta có thể có các số 313 và 331

Yêu cầu: Hãy xác định số lớn nhất trong những số được tạo ra từ cách hoán vị các chữ

số của N

Dữ liệu vào: File văn bản BAI2.INP gồm 1 dòng chứa số nguyên N (số nguyên N

không vượt quá 106 chữ số).

Dữ liệu ra: File văn bản BAI2.OUT có 1 số nguyên, là số lớn nhất trong những số được

tạo ra từ cách hoán vị các chữ số của N.

Ví dụ:

BAI2.INP BAI2.OUT

Bài 3: (4 điểm) Dãy ngoặc đúng phân biệt

Người ta định nghĩa một xâu kí tự gồm các kí tự ‘(’ và ‘)’ là một dãy ngoặc đúng như sau:

- Xâu rỗng là một dãy ngoặc đúng.

- Nếu A là dãy ngoặc đúng thì (X) cũng là một dãy ngoặc đúng

- Nếu A, B là những dãy ngoặc đúng thì AB cũng là dãy ngoặc đúng.

Những dãy ngoặc sau là những dãy ngoặc đúng:

- ()(())

- ((()))

Những dãy ngoặc sau thì không:

Trang 3

- )(

- (((()))

- )()()(

Cho một xâu kí tự T chỉ gồm kí tự ‘(’ và ‘)’ Như vậy xâu con liên tiếp các kí tự của

T có thể là một dãy ngoặc đúng hoặc không đúng

Yêu cầu: Hãy đếm số lượng xâu con phân biệt của T là một dãy ngoặc đúng.

Dữ liệu vào: File văn bản BAI3.INP gồm:

- Dòng thứ nhất chứa số nguyên dương n là số lượng xâu con (n ≤ 20).

- N dòng tiếp theo, mỗi dòng chứa một xâu T (độ dài xâu T không quá 103 kí tự)

Dữ liệu ra: Ghi ra file văn bản BAI3.OUT gồm n dòng, mỗi dòng là số xâu con phân

biệt của T là ngoặc đúng.

Ví dụ:

3 (()())() (()()()()() ()()()(()())(()())

4 5 11

Bài 4: (3 điểm) Dãy con có tổng lớn nhất

Cho dãy số a1…aN Tìm dãy con gồm một phần tử hoặc một số phần tử liên tiếp của dãy đã cho có tổng các phần tử của dãy là lớn nhất

Dữ liệu vào: từ tệp BAI4.INP gồm:

Dòng đầu tiên chứa số nguyên dương N (n≤106)

Dòng thứ 2 chứa dãy số a1 aN Các phần tử trong dãy nhỏ hơn 106

Dữ liệu ra: ghi vào tệp BAI4.OUT

Dòng đầu tiên ghi tổng các phần tử của dãy con thỏa mãn.

Dòng thứ 2 ghi số lượng dãy con thỏa mãn.

Trang 4

Ví dụ:

9

8 12 -14 1 23 -6 22 -34 13

46 1

Bài 5: (3 điểm) Miền mặt phẳng

Trên mặt phẳng cho trước n đường thẳng Các đường thẳng trong mặt phẳng được cho bởi 3 số thực A, B, C với phương trình Ax+By=C (với A, B, C không đồng thời bằng 0).

Yêu cầu: Hãy tính số miền mặt phẳng được chia bởi các đường thẳng này.

Dữ liệu vào: Từ tệp văn bản BAI5.INP:

- Dòng đầu tiên ghi số nguyên dương N (N<100).

- N dòng tiếp theo, mỗi dòng ghi 3 số nguyên A, B, C.

Dữ liệu ra: Ghi ra file BAI5.OUT gồm một dòng duy nhất là kết quả bài toán.

Ví dụ:

BAI5.INP BAI5.OUT BAI5.INP BAI5.OUT

1

1 -1 0

1 0 3

1 0 1

1 -1 0

6

Cán bộ coi thi không giải thích gì thêm.

Trang 5

-Hết -ĐÁP ÁN Bài 1:

const fi='bai1.inp'; fo='bai1.out';

Var

dem:array[10102010 10109999] of longint;

i,n,s:longint;

procedure nhap;

var i:integer; x: longint;

begin

assign(input,fi);reset(input);

fillchar(dem,sizeof(dem),0);

readln(n);

for i:=1 to n do begin read(x); dem[x]:=dem[x]+1;end;

close(input);

end;

begin

nhap;

assign(output,fo);rewrite(output);

s:=0;

for i:=10102010 to 10109999 do

if dem[i]>0 then

if dem[i]<=5 then s:=s+100

else s:=s+100+(dem[i]-5);

write(s);

close(output);

end

Bài 2:

const fi='bai2.inp'; fo='bai2.out';

var st:ansistring;

i:longint;

procedure sx(l,r:longint);

var i,j:longint;

x,tg:char;

begin

x:=st[(l+r)div 2];

i:=l;

j:=r;

while i<=j do

begin

while st[i]>x do inc(i);

while st[j]<x do dec(j);

if i<=j then

begin

tg:=st[i]; st[i]:=st[j]; st[j]:=tg;

end;

inc(i); dec(j);

end;

if i<r then sx(i,r);

if j>l then sx(l,j);

end;

BEGIN

assign(input,fi); reset(input);

assign(output,fo); rewrite(output);

Trang 6

readln(st);

sx(1,length(st));

for i:=1 to length(st) do write(st[i]);

close(input); close(output);

END

Bài 3:

const fi='bai3.inp'; fo='bai3.out';

var s1,s2,s:ansistring;

d,t,i,j,k,n:longint;

begin

assign(input,fi);reset(input);

assign(output,fo);rewrite(output);

readln(n);

for k:=1 to n do

begin

readln(s);s1:=s; t:=0;

for i:=1 to length(s) do

begin

d:=0;delete(s1,1,1);

for j:=i to length(s) do

begin

if s[j]='(' then inc(d)

else dec(d);

if d=0 then

begin

s2:=copy(s,i,j-i+1);

if pos(s2,s1)=0 then inc(t);

end;

if d<0 then break;

end;

end;

writeln(t);

end;

close(input);close(output);

end

Bài 4:

const fi='bai4.inp'; fo='bai4.out';

var i,n,max,d:longint;

a,f:array[0 10000000] of longint;

begin

assign(input,fi); reset(input);

assign(output,fo); rewrite(output);

readln(n);

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

f[1]:=a[1]; d:=1; max:=a[1];

for i:=2 to n do

begin

if f[i-1]+a[i]>a[i] then f[i]:=f[i-1]+a[i]

else f[i]:=a[i];

if f[i]>max then

begin

max:=f[i];

d:=0;

Trang 7

end;

if f[i]=max then inc(d);

end;

writeln(max); writeln(d);

close(input); close(output);

end

Bài 5:

const fi='bai5.inp'; fo='bai5.out';

var l,i,h,j,k1,k2,n,sgd,mmp:longint;

e,f,a,b,c:array[1 200] of real;

d,a1,b1,c1,x,y:real;

procedure kq(m1,p1,q1,m2,p2,q2:real;var x,y:real) ;

var dx,dy:real;

begin

dx:=q1*p2-q2*p1; dy:=m1*q2-m2*q1; x:=dx/d; y:=dy/d;

end;

begin

assign(input,fi); reset(input);

assign(output,fo); rewrite(output);

readln(n);h:=0;

for i:=1 to n do

begin

h:=h+1;

readln(a1,b1,c1);

end;

mmp:=2;

for i:=2 to n do

begin

l:=0;

for j:=i-1 downto 1 do

begin

d:=a[i]*b[j]-a[j]*b[i];

if d=0 then sgd:=0 else

begin kq(a[i],b[i],c[i],a[j],b[j],c[j],x,y);

l:=l+1;

e[l]:=x;f[l]:=y;

end;

end;

begin sgd:=l;

for k1:=2 to l do

for k2:=k1-1 downto 1 do if(e[k1]=e[k2]) and (f[k1]=f[k2]) then

begin sgd:=sgd-1;break;

end;

end;

mmp:=mmp+sgd+1;

end;

writeln(mmp);

close(input);close(output);

end

Ngày đăng: 29/03/2022, 15:20

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