Олимпиадные задачи программирование python

Олимпиадная задача за 10 класс

Задача:
Тот факт, что «дважды два четыре», принимается без каких-либо сомнений, хотя доказательство этого факта не такое простое. Кроме того, сумма двух двоек также равна четырем. Другими словами, 2 + 2 = 4 и 2 * 2 = 4. Среди целых положительных чисел больше нет ни одной пары, у которой бы сумма и произведение были равны. Однако если одно из них нецелое, то таких чисел будет уже много, например, 3 + 1.5 = 3 + 1.5, 11 + 1.1 = 11 * 1.1 и другие.
Вам нужно для заданного целого N найти хотя бы одно число X, для которого сумма с числом N и произведение с N совпадают.

Задачу я решил, по-моему. Код ниже. На вход я подаю число 3

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
N = int(input()) if 1N1000: i = 0 s = 0 p = 0 while True: i += 0.1 s = N + i p = N * i с = s == p if с: print(i) break else: s = 0 p = 0

должно выполнятся, ибо 3*1.5 = 4.5 и 3+1.5 = 4.5 .
Смотрел на свой код через визуализатор, с = False почему-то. В чем может быть проблема? Заранее спасибо.

Источник

Решения задач школьного этапа Всероссийской олимпиады школьников по информатике (9-11 классы)

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

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

Вычислительная компания XYZ закупила новые экспериментальные компьютеры, но её сотрудники не знают, в какой системе счисления новые компьютеры выдают результаты их вычислений. Помогите им определить их результаты в традиционной десятичной системе, если известно, что последовательность цифр N, которую выдает экспериментальный компьютер, записана в минимально возможной для этого системе счисления.

  • Тест №1: N=123
  • Тест №2: N=796
  • Тест №3: N = 60452
  • Тест №4: N = 101001
  • Тест №5: N = 32674
  • Тест №6: N = 306973
  • Тест №7: N = 123042
  • Тест №8: N = 202122
  • Тест №9: N = 871856
  • Тест №10: N = 125341

Решение

Для получения ответов удобно воспользовать программой, в которой будет определяться минимально возможное основание системы счисления:

  • int( max(n) ) + 1 — максимальный символ в строке n переводим в целое число + 1
  • преводим строковое представление числа n с найденным основанием в целое десятичное число: int( строка, основание) (если основание не указано — сторка в десятичном представлении)
for i in range(10): n = input() print ( int( n, int( max(n) ) + 1 ) ) 
123 27 796 796 60452 14639 101001 41 32674 13756 306973 306973 123042 4772 202122 557 871856 519747 125341 11581

Задача B. Улиточные бега

  • Имя входного файла: стандартный ввод
  • Имя выходного файла: стандартный вывод
  • Ограничение по времени: 1 секунда
  • Ограничение по памяти: 256 мегабайт

Каждые 100 лет в Стране Улиток проводятся улиточные бега на дистанции L сантиметров. Это станет для вас неожиданностью, но в этом столетии они проводятся именно сегодня!

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

К сожалению, организаторы забега не могут определить, на какой стороне трассы должен быть расположен финиш, чтобы участники пробежали ровно L сантиметров. Напишите программу, которая поможет определить сторону прямоугольника, на которой должна находиться точка финиша. Обратите внимание, что длина забега может быть больше периметра прямоугольника. В таком случае, участники должны будут пробежать несколько кругов прежде чем финишировать.

Формат входных данных

Вводятся три целых числа A, B, L (2

Формат выходных данных

Выведите TOP, если улитка остановится на верхней стороне прямоугольника, BOTTOM — на нижней, LEFT — на левой, RIGHT — на правой стороне прямоугольника.

Примеры

Решение

После преодаления дистанции равной периметру прямоугольника 2(a+b) — история со сторонами повтаряется. Поэтому достаточно взять не всю дистанцию l, а ее остаток на длину периметра l = l % 2(a+b). Далее, сравниваем l с длиной сторон в рамках одного периметра: до a — нижняя, иначе до a+b — правая, иначе до 2a+b — верхняя и иначе — левая

a,b,l=int(input()), int(input()), int(input()) l %= 2*(a+b) print (la and 'BOTTOM' or l(a+b) and 'RIGHT' or l(a+a+b) and 'TOP' or 'LEFT') 

Задача C. Треугольник

  • Имя входного файла: стандартный ввод
  • Имя выходного файла: стандартный вывод
  • Ограничение по времени: 1 секунда
  • Ограничение по памяти: 256 мегабайт

На координатной плоскости расположены равнобедренный прямоугольный треугольник ABC с длиной катета d и точка X. Катеты треугольника лежат на осях координат, а вершины расположены в точках: A(0, 0), B(d, 0), C(0, d). Требуется написать программу, которая определяет взаимное расположение точки X и треугольника. Если точка X расположена внутри или на сторонах треугольника, выведите 1. Если же точка находится вне треугольника, выведите 0.

Формат входных данных

В первой строчке вводится натуральное число d (не превосходящее 1000), во второй — координата точки X по оси OX (целое число из диапазона от −1000 до 1000), в третьей координата точки X по оси OY (целое число из диапазона от −1000 до 1000).

Формат выходных данных

Если точка лежит внутри, на стороне треугольника или совпадает с одной из вершин, то выве- дите число 1. Если точка лежит вне треугольника, то выведите 0.

Примеры

Источник

Решение олимпиадных задач по информатике: Линейный футбол

Близнецам Петру и Павлу родители подарили на день рождения настольный футбол, но не простой, а линейный.
В этом варианте игры все фигурки игроков расположены в одну линию на равном расстоянии друг от друга. Всего есть n игроков. Для определённости пронумеруем их позиции числами от 1 до n слева направо. Ворота находятся в позициях 0 и n+1. Каждый игрок имеет свою силу удара и может при ударе по мячу перебросить его на фиксированное количество позиций другому игроку. Силу удара игрока на позиции i обозначим через ai, что означает, что после удара этого игрока мяч переместится на ai позиций. Если ai положительное, то мяч переместится вправо, в сторону увеличения номеров, а если ai отрицательное, то мяч переместится влево, в сторону уменьшения. Если после удара мяч попадает в позицию, меньшую либо равную 0, то засчитывается гол в левые ворота, а если в позицию, большую либо равную n+1, то в правые. Если после удара мяч попадает к другому игроку, то тот наносит следующий удар со своей силой, и игра продолжается.
Близнецы решили сыграть n игр, в i‑й из которых первый удар нанесёт игрок номер i. Для каждой игры выведите, в какие ворота будет забит мяч в этой игре (L, если в левые, R, если в правые, U, если гол никто не забьёт).

n = int(input()) players = [int(input()) for _ in range(n)] answer = '' for i in range(n): k = i while k + players[k] > -1 and k + players[k] < n: if players[k] + players[k + players[k]] != 0: k += players[k] else: answer += 'U' break if k + players[k] < 0: answer += 'L' elif k + players[k] >n - 1: answer += 'R' print(answer)
var n,i,k:integer; answer:string; players:array of integer; begin read(n); players := new integer[n]; for i := 0 to n - 1 do read(players[i]); answer := ''; for i := 0 to n - 1 do begin k := i; while (k + players[k] > -1) and (k + players[k] < n) do if players[k] + players[k + players[k]] <>0 then k := k + players[k] else begin answer := answer + 'U'; break end; if k + players[k] < 0 then answer := answer + 'L' else if k + players[k] >= n then answer := answer + 'R'; end; write(answer); end.

Источник

Олимпиадная задача

. Однажды в Арктике обострилось межвидовое противостояние.

Полярные совы решили проявить глобальные амбиции и построили треугольное укрепление в окрестностях Северного Полюса. Для сохранения стратегического паритета на спорную территорию пришли полярные лисы с намерением построить укрепление, симметричное построенному совами относительно Северного Полюса.

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

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

Формат ввода
Входные данные состоят из 6 целых чисел x1, y1, x2, y2, x3 и y3, по абсолютной величине не превосходящих 104 — координаты вершин укрепления, построенного совами. Гарантируется, что треугольник имеет ненулевую площадь.

Формат вывода
Выведите 987 654 321, если лисы не смогут построить симметричное укрепление, не пересекаясь с укреплением, построенным совами. В противном случае выведите координаты вершин укрепления, построенного лисами, в формате, аналогичном формату входных данных и в том же порядке, что и вершины симметричного укрепления сов.

Пример 1
Ввод Вывод
0 0 1 0 1 1
987654321
Пример 2
Ввод Вывод
3997 10 8 -360 0 6
-3997 -10 -8 360 0 -6

Почему — то код не работает, на пятом тесте WA

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
def otr(a, b): if (((a[0]  0 and b[0] >= 0) or (a[0] >= 0 and b[0]  0))) and not (a[0] == 0 and b[0] == 0): return (0, a[1] - (a[1] - b[1]) / (a[0] - b[0]) * a[0]) return False def k(a, b, c): l = 0 k = 0 if [a, b, c].count(False) > 1: return True else: for t in [a, b, c]: if t: if t[1] > 0:l = 1 elif t[1] == 0:k = l = 1 else:k = 1 if k and l: return True def panky(a, b, c): if not k(otr(a, b), otr(b, c), otr(a, c)): return True x1, y1, x2, y2, x3, y3 = map(int, input().split()) if panky([x1, y1], [x2, y2], [x3, y3]): print(-x1, -y1, -x2, -y2, -x3, -y3) else: print(987654321)

Источник

Читайте также:  Timestamp from time php
Оцените статью