Задача а (№113014) Сажени, аршины, пяди, вершки



жүктеу 161.27 Kb.
Дата07.02.2019
өлшемі161.27 Kb.
түріПрограмма


Школьный тур олимпиады по информатике и ИКТ

2016-2017 учебный год

7-11 класс

Ответы и решения

Данные вводятся с клавиатуры или из файла input.txt, выводятся на экран или в файл output.txt. Тесты не совпадают с примерами из условия.
Учащиеся 7-8-х классов выполняют задания: A,B,C,E

Учащиеся 9-11-х классов выполняют задания: А,D,E,F

Олимпиада проводится в 1 тур

Продолжительность олимпиады: 4 часа
Задача А (№113014) Сажени, аршины, пяди, вершки

Данные вводятся с клавиатуры или из файла input.txt, выводятся на экран или в файл output.txt. Первые тесты не всегда совпадают с примерами из условия.
Чтобы посмотреть код лучших решений, необходимо сначала сдать своё правильное решение

Для этой задачи нет подсказок



Ограничение по времени, сек

1

Ограничение по памяти, мегабайт

64







Древнерусская мера длины сажень состояла из трёх аршин. Один аршин делился на четыре пяди. Одна пядь состояла из 4 вершков.

Купец привез на рынок рулон сукна длиной N вершков, но для уплаты пошлины ему нужно указать длину сукна в саженях, аршинах, пядях и вершках. Помогите ему – переведите длину сукна, записанного в вершках в сажени, аршины, пяди и вершки.

Программа получает на вход одно натуральное число N, не превосходящее 2109, – длину сукна в вершках.

Программа должна вывести 4 целых неотрицательных числа S, A, P, V – количество саженей, аршин, пядей и вершков, в сумме дающих ровно N вершков, при этом значение A должно быть меньше 3 (т. к. 3 аршина дают одну сажень), значение P должно быть меньше 4 (четыре пяди дают один аршин), значение V должно быть меньше 4 (четыре вершка дают одну пядь).



Пояснение к примеру

30 вершков это 0 саженей, 1 аршин, 3 пяди и 2 вершка



Примеры

Входные данные

30

Выходные данные

0 1 3 2
Решение

program a_1;

var s,a,p,v,n: integer;

begin

  read (n);

  v:=n mod 4;

  p:=n div 4;

  a:=p div 4;

  p:=p mod 4;

  s:=a div 3;

  a:=a mod 3;

  write (s,' ',a,' ',p,' ',v);

end.
Задача В (№111985) Информатическая сила

Данные вводятся с клавиатуры или из файла input.txt, выводятся на экран или в файл output.txt. Первые тесты не всегда совпадают с примерами из условия.


Ограничение по времени, сек

1

Ограничение по памяти, мегабайт

64




Язык

Free Pascal

GNU C++

Min время, сек

0.002

0.007

Среднее время, сек

0.115

0.008

Верных решений

19

4




В одной школе издавна велись соревнования в информатической силе между классами одной параллели. По введённой учителями шкале информатическая сила класса — это суммарное количество задач, решённых всеми школьниками этого класса на последней школьной олимпиаде. Соревновательный дух школы весьма высок, а значит, каждый участник решил хотя бы одну задачу.

В школьной летописи сохранились информатические силы двух классов, A и B, а также количество задач на олимпиаде N. Завучу, нашедшему летопись, очень хочется узнать, могло ли быть в первом классе больше учеников, чем во втором.

Напишите программу, которая определит, могло ли быть учеников в классе с информатической силой A больше, чем учеников в классе с информатической силой B.

Входные данные

Вводятся три целых числа, каждое в своей строке — A, B, N (0 ≤ A, B ≤ 10 000, 1 ≤ N ≤ 10 000).



Выходные данные

Выведите «Yes», если в первом классе могло быть больше учеников, чем во втором, и «No», в противном случае.



Примеры тестов

Входные данные

60
30


4

Выходные данные

Yes


Входные данные

30
30


1

Выходные данные

No

Входные данные

30
150
4

Выходные данные

No

Примечание

Тесты к этой задаче состоят из четырех групп.


  • Тесты 1 – 3. Тесты из условия, оцениваются в ноль баллов.

  • Тесты 4 – 17. В тестах этой группы 0 ≤ A, B ≤ 10, 1 ≤ N ≤ 10. Эта группа оценивается в 30 баллов, баллы ставятся только при прохождении всех тестов группы.

  • Тесты 18 – 20. В тестах этой группы дополнительные ограничения отсутствуют. Эта группа оценивается в 30 баллов, баллы ставятся только при прохождении всех тестов группы.

  • Тесты 21 – 30. В тестах этой группы дополнительные ограничения отсутствуют. Эта группа оценивается в 40 баллов, баллы ставятся только при прохождении всех тестов группы.

Решение

var


a,b,c:longint;

begin


read(a,b,c);

if (b + c -1)div c < a then write('Yes')

else write('No');

end.
Задача С (№111986) Олимпийский огонь



Данные вводятся с клавиатуры или из файла input.txt, выводятся на экран или в файл output.txt. Первые тесты не всегда совпадают с примерами из условия

Ограничение по времени, сек

1

Ограничение по памяти, мегабайт

64




Язык

Free Pascal

GNU C++

Python 3.1

Min время, сек

0.004

0.004

0.052

Среднее время, сек

0.296

0.042

0.052

Верных решений

20

13

1




В одном известном всем городе скоро стартуют Зимние Олимпийские игры. В связи с этим организаторы игр решили провести эстафету Олимпийского огня — самую продолжительную и масштабную в истории Олимпийских игр. Эстафета состоит из N этапов, каждый длиной ai километров (1 ≤ i ≤ N). У организаторов имеется большое количество олимпийских факелов, каждый из которых может непрерывно гореть на протяжении K километров забега. По правилам эстафеты каждый факел используется только один раз. В начале каждого этапа участникам эстафеты выдаётся некоторое число факелов, такое, чтобы олимпийский огонь удалось донести до конца этапа. По окончании этапа все использованные (полностью или частично) факелы передаются в дар своим факелоносцам.

Напишите программу, которая по известной схеме эстафеты олимпийского огня, определяет необходимое суммарное количество факелов для проведения эстафеты.



Входные данные

В первой строке заданы два натуральных числа N и K (N ≤ 100, K ≤ 106).

Во второй строке заданы N натуральных чисел ai (ai ≤ 106).

Выходные данные

В первой строке выведите одно натуральное число F — количество факелов, которое понадобится организаторам для проведения эстафеты олимпийского огня.



Примеры тестов

Входные данные

4 3
3 5 4 1



Выходные данные

6

Входные данные

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

Выходные данные

55

Примечание

В данной задаче баллы за каждый тест начисляются независимо от прохождения остальных тестов и суммируются.
Решение

program dkads;

var i,n,k,f : longint;

a: array [1..100] of longint;

begin

readln(n,k);



for i:=1 to n do

read (a[i]);

f:=0;

for i:=1 to n do



begin

f:=f+a[i] div k;

if a[i] mod k <>0

then f:=f+1;

end;

writeln (f);


Задача D (№111476) Последовательности

Данные вводятся с клавиатуры или из файла input.txt, выводятся на экран или в файл output.txt. Первые тесты не всегда совпадают с примерами из условия.

Ограничение по времени, сек

2

Ограничение по памяти, мегабайт

64




Язык

Free Pascal

GNU C++

Haskell

Min время, сек

0.002

0.001

0.004

Среднее время, сек

0.003

0.004

0.004

Верных решений

4

9

1




Мальчику Пете очень нравится математика. Недавно он выписал открыл новую последовательность чисел и, назвав её в свою честь, тут же записал её на длинной ленте, чтобы не забыть. Всё бы хорошо, но у Пети есть младший брат Гена. Гене не очень нравится математика - он мечтает стать дизайнером. Вот и сейчас, увидев новую красивую ленточку, он решил вырезать её часть и украсить ей свою комнату. А чтобы украшению порадовался и Петя, Гена решил вырезать такую часть, чтобы сумма всех чисел на ней была бы как можно больше.

Входные данные

В первой строке входного файла записано число n (1 ≤ n ≤ 100000) - длина последовательности Пети. Во второй строке записаны числа a1, ..., an - сама последовательность( - 109 ≤ ai ≤ 109).



Выходные данные

Выходной файл должен содержать два числа - максимальную сумму, которую может получить Гена, и количество вариантов получить данную сумму.



Примеры

Входные данные

5

-1 2 3 -2 2



Выходные данные

5 2
Решение


Pascal ABC.net

var i, j, n: integer;

s, k, t, m, mk, sk: int64;

a: array[1 .. 100000] of int64;


Begin

readln(n);

k := n + 1;

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

m := 0; mk := 1; s := -1000000000000;

sk := 1; t := 0;

for i := 1 to n do

begin


Inc(t, a[i]);

if t - m > s then

begin

s := t - m;



sk := mk;

end


else

if t - m = s then Inc(sk, mk);

if t < m then

begin


m := t;

mk := 1;


end

else


if t = m then Inc(mk);

end;


writeln(s, ' ', sk);

End.



Задача E (№111987) Шахматные клетки

Данные вводятся с клавиатуры или из файла input.txt, выводятся на экран или в файл output.txt. Первые тесты не всегда совпадают с примерами из условия.

Ограничение по времени, сек

1

Ограничение по памяти, мегабайт

64




Язык

Free Pascal

GNU C++

Python 3.1

Min время, сек

0.044

0.032

0.389

Среднее время, сек

0.092

0.102

0.389

Верных решений

2

3

1




Недавно Петя услышал на шахматном кружке о мегашахматах.

Поле для мегашахмат — это разделённый на клетки прямоугольник, в котором каждый горизонтальный ряд клеток имеет свою высоту, а каждый вертикальный столбец — свою ширину. Всего на поле n рядов и m столбцов клеток, высота i-го ряда составляет ai сантиметров, а ширина j-го столбца — bj сантиметров. Столбцы нумеруются слева направо, а строки — снизу вверх. Клетки покрашены в чёрный и белый цвета в шахматном порядке, левая нижняя клетка поля черная. Это значит, что соседи каждой клетки по вертикали и горизонтали отличаются от нее по цвету.



Пете стало очень интересно, какую площадь в квадратных сантиметрах занимают чёрные и белые клетки. Напишите программу, которая вычислит искомые площади.



Входные данные

В первой строке вводятся два целых числа n и m — количества рядов и столбцов клеток на поле для мегашахмат (1 ≤ n, m ≤ 105).

Во второй строке вводится n целых чисел ai — высоты рядов клеток в сантиметрах (1 ≤ ai ≤ 100).

В третьей строке вводится m целых чисел bj — ширины столбцов клеток в сантиметрах (1 ≤ bj ≤ 100).



Выходные данные

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



Примеры тестов

Входные данные

8 8
1 1 1 1 1 1 1 1


1 1 1 1 1 1 1 1

Выходные данные

32 32


Входные данные

2 3
3 2


3 2 1

Выходные данные

16 14


Примечание

Второй тест из условия соответствует рисунку.

Тесты к этой задаче состоят из трех групп. Если решение не проходит какую-либо группу тестов, следующие группы не проверяются.


  • Тесты 1 – 2. Тесты из условия, оцениваются в ноль баллов.

  • Тесты 3 – 20. В тестах этой группы 1 ≤ n, m ≤ 103, 1 ≤ ai, bi ≤ 10. Эта группа оценивается в 40 баллов, баллы ставятся только при прохождении всех тестов группы.

  • Тесты 21 – 32. В тестах этой группы дополнительные ограничения отсутствуют. Прохождение тестов из этой группы оценивается из 60 баллов, баллы начисляются за каждый тест независимо от прохождения остальных тестов и суммируются.


Решение

var

  n, m, a, a1, a2, b, b1, b2, rez1, rez2: int64;

  i: integer;

 

Begin

  readln(n, m);

  a1 := 0; a2 := 0;

  for i := 1 to n do

  begin

    read(a);

    if odd(i) then a1 += a

    else a2 += a;

  end;

  readln;

  for i := 1 to m do

  begin

    read(b);

    if odd(i) then b1 += b

    else b2 += b;

  end;

  readln;

  rez1 := a1 * b1 + a2 * b2;

  rez2 := a1 * b2 + a2 * b1;

  writeln(rez1, ' ', rez2);

End.
Задача F (№111988) Хоровод

Данные вводятся с клавиатуры или из файла input.txt, выводятся на экран или в файл output.txt. Первые тесты не всегда совпадают с примерами из условия.


Ограничение по времени, сек

1

Ограничение по памяти, мегабайт

64




Язык

GNU C++

Min время, сек

0.065

Среднее время, сек

0.088

Верных решений

2




Настал декабрь, и вместе с ним пришло время готовиться к Новому Году. На острове рыцарей и лжецов этот праздник традиционно отмечается очень масштабно. Праздничный стол, новогодняя ёлка, конфетти и бенгальские огни — все готово к началу торжества.

Как вы знаете, на острове рыцарей и лжецов живут только два вида жителей — рыцари и лжецы. Рыцари никогда не лгут, так как этого им не позволяют их высокие моральные принципы. Лжецы же, наоборот, всегда говорят только неправду.

Важнейшей частью празднования Нового года является хоровод вокруг елки. Все приглашенные жители острова берутся за руки и движутся по кругу под музыку. Поскольку население острова весьма консервативно, то в этом году жители хотят выстроиться в круг в том же порядке, что и в прошлом. Однако данных о том, как был устроен хоровод, не сохранилось. Известно только, что каждый житель острова запомнил, кем были его соседи по хороводу (рыцарями или лжецами).

Опросив каждого человека, приглашенного на празднование, вы узнали, кем были их соседи по их словам (при этом лжецы говорят неправду про каждого соседа). Осталось только придумать какое-нибудь расположение жителей острова в круг так, чтобы их показания не противоречили друг другу.

Напишите программу, которая по списку жителей и их показаний определит, существует ли такое расположение или же выстроиться в хоровод как в прошлом году не получится.

Входные данные

В первой строке входных данных дано целое число n (2 ≤ n ≤ 105) — количество жителей на острове лжецов.

В следующих n строках даны целые числа li и ri (0 ≤ li, ri ≤ 1) — данные о соседях i-го человека. Если li = 0, то i-й житель утверждает, что его сосед по хороводу в направлении против часовой стрелки был лжецом, а если li = 1, то рыцарем. Аналогично, число ri содержит информацию о соседе по часовой стрелке.

Выходные данные

Требуется вывести «Yes», если существует способ выстроить людей по указанным правилам, или «No», если нет.



Примеры тестов

Входные данные

5
1 1


0 1
1 1
0 0
1 0

Выходные данные

Yes


Входные данные

2
0 0


1 1

Выходные данные

No

Примечание

Тесты к этой задаче состоят из четырёх групп.


  • Тесты 1 – 2. Тесты из условия, оцениваются в ноль баллов.

  • Тесты 3 – 10. На тесты этой группы накладывается ограничение n ≤ 10. Группа тестов оценивается в 20 баллов, баллы ставятся только при прохождении всех тестов группы.

  • Тесты 11 – 26. На тесты этой группы накладывается ограничение n ≤ 20. Группа тестов оценивается в 25 баллов, баллы ставятся только при прохождении всех тестов группы.

  • Тесты 27 – 38. В тестах этой группы дополнительные ограничения отсутствуют. Группа оценивается в 55 баллов, баллы ставятся только при прохождении всех тестов группы.

В первом примере, можно выстроить жителей в порядке (2, 1, 3, 5, 4) по часовой стрелке. Показания всех людей будут сходиться в этом случае, например, когда четвертый житель будет рыцарем, а все остальные четыре человека — лжецами.

Во втором примере, очевидно, нельзя получить никакого решения, так как выстроить двух человек в хоровод можно лишь одним способом. Рассмотрим два случая: если первый человек — рыцарь, то, по его словам, второй человек — лжец, однако, из лживости его слов следует, что первый человек не рыцарь. С другой стороны, если первый человек — лжец, то из его показаний следует, что второй человек — рыцарь, но второй человек говорит, что первый — тоже рыцарь. Таким образом, поскольку в обоих случаях мы получили противоречие, не существует способа построить хоровод из имеющегося набора жителей.


Решение

var x, y, a, b, n, i, c, d, e: integer;

 

Begin

  a:=0; b:=0; c:=0; d:=0; e:=0;

  readln(n);

  for i := 1 to n do

  begin

    readln(x, y);

    if (x = 1) and (y = 1) then Inc(c)

    else

      if (x = 0) and (y = 0) then Inc(a)

      else

        begin

          Inc(b);

          if (x = 1) then Inc(d) else Inc(e);

        end;

  end;

  if (d=e)and((2*a+b) mod 4 = 0)and not((c<>0)and(b=0)and(a<>0)) then

    writeln('Yes')



  else writeln('No');

End.

Достарыңызбен бөлісу:


©kzref.org 2019
әкімшілігінің қараңыз

    Басты бет