Задачи   районной олимпиады

 

Задачи   районной олимпиады

по информатике 2007 с  решением 

 

1. Королевская гвардия

 

Король издал приказ о зачислении в свою гвардию N самых высоких солдат,

среди всех K солдат, состоящих у него на службе. Необходимо предоставить

королю рост самого высокого и самого низкого из солдат его гвардии.

Оценка 100 баллов.

Технические требования.

Входными данными являются два целых числа N и K, разделенные знаком

пробела, стоящие в первой строке (0<NK, N≤10000, K≤500000),

а затем K целых чисел (рост солдат) разделенные знаками пробела

и/или перевода строки (все числа по модулю не превосходят 2·109).

Выходные данные - два числа в двух строках – рост самого высокого

(первая строка) и рост самого низкого (вторая) гвардейца.

Время работы программы - 5 сек.

Примеры входных и выходных данных

INPUT1.TXT

1 2

12 13

5 5

6 5 3 2 6

2 2

1234567891 1234567892

OUTPUT1.TXT

13

13

6

2

1234567892

1234567891

 

 

Программа на Turbo Pascal:

Program s1g2007;

Uses crt;

label v0,v1;

Const k1='Input1.PAS';  k2='Output1.PAS';

Var   Input1,Output1  :text;

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

      v: array[1..1000] of longint;

begin clrscr; textcolor(7); textbackground(5);

      assign(INPUT1,k1); reset(INPUT1);

      assign(Output1,k2); rewrite(Output1);

      readln(INPUT1,n,k);

      for i:=1 to n do read(input1,v[i]);

      for i:=1 to n-1 do

      for j:=i to n do

      if v[i]<v[j] then begin d:=v[i];

      v[i]:=v[j]; v[j]:=d; end;

 

      for i:=n+1 to k do begin

      read(input1,b);

      for j:=1 to n do

      if b>v[j] then begin d:=v[j];

      v[j]:=b; b:=d; end; end;

      writeln(output1,v[1]:10);

      write(output1,v[n]:10);

      close(output1); end.

 

 

 

 

 

2. Настенный календарь

На настенном календаре даты каждой недели записаны в строку, перед которой

указан номер недели (первая неделя определяется 1 января, даже если это воскресенье).

 В такой записи иногда два одинаковых числа идут рядом, когда номер недели года

совпадает с числом понедельника этой недели. Вывести номера всех недель

заданного года, обладающих указанным свойством.

Количество дней по месяцам года: январь, март, май, июль, август, октябрь,

декабрь - 31, февраль - 28 (29 в високосном году), остальные по 30.

Год високосный, если он кратен 4. Известно, что 01.01.2001 был понедельник

Оценка 100 баллов.

Технические требования.

Входными данными является номер года Y, записанный четырмя цифрами (2001≤Y≤2099).

Выходные данные – номера недель, расположенные по одному в строках,

начиная с первой, или слово NO, при отсутствии таких недель

Время работы программы - 5 сек.

Примеры входных и выходных данных

INPUT2.TXT

2001

2008

OUTPUT2.TXT

1

16

21

NO

 

Программа на Turbo Pascal:

Program s2g2007;

Uses crt;

Const k1='Input2.PAS';

      k2='Output2.PAS';

Var   Input2,Output2  :text;

      i,j,l,N,n1,n2,k  :integer;

      G: array[1..371] of integer;

      M: array[1..12] of integer;

      B: array[1..31] of integer;

begin clrscr; textcolor(7); textbackground(5);

      assign(Input2,k1); reset(Input2);

      assign(Output2,k2); rewrite(Output2);

      M[1]:=31; M[2]:=28; M[3]:=31; M[4]:=30;

      M[5]:=31; M[6]:=30; M[7]:=31; M[8]:=31;

      M[9]:=30; M[10]:=31; M[11]:=30; M[12]:=31;

      readln(Input2,N);

      if N mod 4=0 then M[2]:=29;

      for i:=1 to N do if i=2001 then k:=1 else begin

      if i mod 4=0 then k:=k+2 else k:=k+1;

      if k>7 then k:=k mod 7; end;

      for i:=1 to 12 do

      for j:=1 to M[i] do begin G[k]:=j; k:=k+1; end;

      j:=1; l:=1;

      for i:=1 to 31 do begin  if G[j]=i then begin

      B[l]:=i; l:=l+1; end;  j:=j+7; end;

 

      k:=0;  for i:=1 to 31 do begin write('N=',i:2);

      for j:=1 to 7 do write(G[k+j]:3); writeln;

      k:=k+7; end;

 

      if l=1 then write(Output2,'NO') else

      for i:=1 to l-1 do writeln(Output2,B[i]:2);

      Close(Output2); end.

 


 

 

4. Аквариумы.

Аквариумная фирма производит аквариумы только в форме куба, со стороной, кратной

 дециметру. Цена аквариума объёмом V литров составляет V2/3 у. Поступил заказ

 на сумму S у.. Требуется сделать минимальное количество аквариумов на указанную

 сумму. Определить это количество.

Оценка 100 баллов.

Технические требования.

Входными данными является натуральное число S (1≤S≤60000)

Выходные данные - одно натуральное число, представляющее результат вычислений.

Время работы программы - 5 сек.

Примеры входных и выходных данных

INPUT4.TXT

1

10

512

1024

OUTPUT4.TXT

1

2

2

1

 

Программа на Turbo Pascal:

Program s4g2007;

Uses crt;

label v0,v1;

const   k1='Input4.PAS';

        k2='Output4.PAS';

var   Input4,Output4  :text;

        i,j,d  :longint;

        r,s    :real;

 

begin clrscr; textcolor(7); textbackground(5);

      assign(INPUT4,k1); reset(INPUT4);

      assign(Output4,k2); rewrite(Output4);

      readln(INPUT4,s);  d:=0;

 

      if s=1 then begin d:=1; goto v1; end

             else begin

 

v0:   r:=sqrt(s);

      r:=sqr(int(r)); d:=d+1;

      writeln('n=',d:1,r:7:0);

      if s-r>0 then begin s:=s-r; goto v0; end; end;

 

v1:   write(output4, d:3);

      close(output4);  end.