Лучшее - детям. Знак качества
Краевое государственное общеобразовательное автономное учреждение
Центр образования "Эврика"
  • :
  • :
Турнир по программированию "Первые шаги".

Турнир по программированию "Первые шаги".

Дата проведения:
26 сентября 2020 года.
Место проведения:
В домашних условиях.

Турнир состоялся, всем спасибо за участие!

Для оперативного подведения итогов, жюри просит указать всех участников свой класс и школу в профиле на CATS.

В течение понедельника 28 сентября принимаются вопросы и апелляции по адресу akar_@mail.ru.

Краткий разбор задач:

A) Если d делится на 7, значит все таблетки попадут в первую ячейку, иначе в каждую из семи ячеек кладем по d/7 пилюль, а остаток распределяем так: первая из оставшихся — в первую, а остальные по формуле новый номер = (старый номер + d) остаток от деления на 7 + 1

Решение Кобец Ивана (Владивосток):

  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <string>
  5. using namespace std;
  6. vector<long long> days(7, 0);
  7. int main() {
  8. //freopen(«input.txt», «r», stdin);
  9. //freopen(«output.txt», «w», stdout);
  10. long long n, m, now = 0;
  11. cin >> n >> m;
  12. long long k = 0;
  13. k = (n / 7);
  14. now = 0;
  15. if(m % 7 == 0) {
  16. cout << n << ' ' << 0 << ' ' << 0 << ' ' << 0 << ' ' << 0 << ' ' << 0 << ' ' << 0;
  17. return 0;
  18. }
  19. for(int i = 0; i < n % 7; i++) {
  20. days[now % 7]++;
  21. now += m;
  22. }
  23. for(auto x: days) cout << x + k << ' ';
  24. }
B) Для каждого из видов шурупов минимальное достоверное количество определится как n — сумма шурупов других видов. Если это число получилось отрицательным, меняем его на 0.

Решение Скобелева Никиты:

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int a, b, c, n;
  6. cin >> a >> b >> c >> n;
  7. int a1 = n-b-c;
  8. if (a1<0) a1=0;
  9. int b1 = n-a-c;
  10. if (b1<0) b1=0;
  11. int c1 = n-b-a;
  12. if (c1<0) c1=0;
  13. cout <<a1<< " " << b1 << " " << c1;
  14. return 0;
  15. }

C) Найдем остальные три точки квадрата. Пусть x, y — координаты центра, а p, q — известная вершина. Тогда стальные вершины можно найти так:

  1. dx = p — x
  2. dy = q — y
  3. p1 = x — dx
  4. q1 = y — dy
  5. p2 = x — dy
  6. q2 = y + dx
  7. p3 = x + dy
  8. q3 = y — dx

Как проверить, что третья точка (x, y) лежит на прямой, проходящей через две другие точки (x1, y1) и (x2, y2)? должно выполняться следующее равенство (это собственно и есть уравнение прямой):

А чтобы убедиться, что она лежит еще и между этими двумя точками, достаточно двойного неравенства.

Авторское решение:

def cheak(x1, y1, x2, y2, x3, y3):

if (x2 — x1) * (y3 — y1) == (y2 — y1) * (x3 — x1) and (x1 <= x3 <= x2 or x2 <= x3 <= x1):

return True

return False


input = open('input.txt', 'r')

output = open('output.txt', 'w')

x, y = map(int, input.readline().split())

p, q = map(int, input.readline().split())

a, b = map(int, input.readline().split())

dx = p — x

dy = q — y

p1 = x — dx

q1 = y — dy

p2 = x — dy

q2 = y + dx

p3 = x + dy

q3 = y — dx

if cheak(p, q, p2, q2, a, b) or cheak(p, q, p3, q3, a, b) or cheak(p1, q1, p2, q2, a, b) or cheak(p1, q1, p3, q3, a, b):

output.write('YES')

else:

output.write('NO')

input.close()

output.close()

D) Будем делить наше число на 9, 8, 7, 6 и так далее. Если делится нацело — добавляем цифру к числу-ответу, иначе — переходим к следующему.

Решение Сейтхалилова Артёма:

n = int(input())

if n == 0:

print(10)

else:

s = ''

for i in range(9, 1, -1):

while n%i == 0:

s += str(i)

n //= i

print(s[::-1] or '1' if n == 1 else -1)

Е) Увы, в ряде тестов вместо n был указан показатель степени двойки, дающей n. Это привело к тому, что верные решения давали лишь 14 баллов. Оперативно проблему исправить не удалось, тесты были исправлены и задача перезагружена только после окончания турнира. Жюри еще раз приносит свои извинения.

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

Решение Скобелева Никиты:

  1. #include <iostream>
  2. #include <math.h>
  3. #include <vector>
  4. using namespace std;
  5. int main()
  6. {
  7. long long a;
  8. cin>>a;
  9. vector<long long>b(a);
  10. for(long long i=0;i<a;i++)
  11. {
  12. cin>>b[i];
  13. }
  14. long long k=0,c=2,d=1;
  15. for(;c<=a/2;)
  16. {for(long long i=0;i<a;i+=c)
  17. {if(b[i]==b[i+d])k++;b[i]+=b[i+d];}
  18. c*=2;d*=2;}
  19. if(b[0]==b[a/2])k++;
  20. cout<<k;
  21. return 0;
  22. }




Уважаемые коллеги!

Краевое государственное общеобразовательное автономное учреждение «Центр образования «Эврика» проводит в 2020 году в Камчатском крае турнир по программированию «Первые шаги».

Турнир по программированию «Первые шаги» — очно-заочная командная олимпиада по информатике. В связи с эпидемиологической обстановкой, в 2020 году турнир пройдет в формате личной (не командной, как обычно) олимпиады в дистанционном режиме.

Порядок проведения турнира.

Продолжительность основного тура — 3 часа. Во время олимпиады участникам предлагается решить 5 задач. Написанные участниками решения (исходный текст программы — файл с расширением .pas, .dpr, .c, .cpp и т.п.) сдаются в автоматизированную тестирующую систему.

Участникам турнира разрешено использовать любые письменные материалы (книги, тетради с записями, …), но они не могут пользоваться никакими электронными устройствами (мобильными телефонами, калькуляторами, плеерами, флешками и т.п.), а также не имеют право использовать интернет, кроме страницы сдачи решений в тестирующей системе.

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

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

Задачи прошлых лет (с 2013 по 2018 год, тема 33) на сайте Дистанционной подготовки.

Задачи 2019 года на сайте CATS ДВФУ.

C 2019 года турнир проходит на базе тестирующей системы ДВФУ https://imcs.dvfu.ru/cats (в прошлые годы турнир проходил на сайте informatics), желательно, чтобы участники владели основами работы с тестирующей системой (умели отправлять решения, понимать вердикты ТС). Всем интересующимся олимпиадной информатикой рекомендуется зарегистрироваться (инструкция) на этом сайте и прорешать задачи пробного тура. Задачи пробного тура несложные, направлены на знакомство с тестирующей системой. Результаты пробного тура не влияют на итоги основного турнира.

Ссылка на турнир 2020 года.


В Камчатском крае турнир пройдет 26 сентября 2020 года (суббота).

График турнира в 2020 году:

До 26 сентября 2020 – регистрация участников, самостоятельное решение задач пробного тура.

26 сентября 2020 года с 10.00 до 13.00 – проведение турнира.

26 сентября 2020 года с 13.00 – подведение итогов, определение победителей, разбор задач.

с 30 сентября 2020 – изготовление дипломов (в электронном виде).

Участие в турнире – бесплатное.

Методист по информационным технологиям КГОАУ ЦО «Эврика» Карабанов Антон Викторович.

По всем вопросам можно обращаться по почте akar_@mail.ru

Спортивное программирование в Камчатском крае.

13:05
454

Нет комментариев. Ваш будет первым!
Загрузка...