Розв’язок олімпіадної задачі з програмування Площа

18 Листопада, 2019
Розв’язок олімпіадної задачі з програмування Золота середина
17 Листопада, 2019
Розв’язок олімпіадної задачі з програмування Лелеки
18 Листопада, 2019
Розв’язок олімпіадної задачі з програмування Золота середина
17 Листопада, 2019
Розв’язок олімпіадної задачі з програмування Лелеки
18 Листопада, 2019

Розв'язок олімпіадної задачі пробного туру з програмування 2019 року "Площа"

Використовується мова програмування Python 3

Правильність розв'язку - 88/100

Площа

Площа в рідному місті Степана являє собою прямокутник M × N метрів. З нагоди ювілею міста було прийнято рішення про замощення площі прямокутними гранітними плитами. Кожна плита має розмір K × L метрів. Ювілей зовсім близько, але робочі так і не змогли визначити, яку найменшу кількість плит знадобиться для замощення площі. Степан моментально придумав рішення для цього завдання. А чи зможете придумати його Ви? Дозволено покрити плитами поверхню більшу, ніж площа, але сама площа повинна бути покрита обов'язково. Гранітні плити не можна ламати або дробити, їх дозволено використовувати тільки цілком. Плити можна повертати, але їх сторони повинні бути паралельні сторонам площі. Якщо сторони плити різного розміру (якщо плита не квадратна), сторони однакової довжини всіх плит повинні бути паралельні одна одній.

Формат вхідних даних:

У першому рядку вхідних данних записано 4 цілих числа N, M, K, L (1 ≤ N, M, K,L ≤ 100000).

Формат вихідних даних:

Потрібно вивести одне число - мінімальну кількість плит, яка буде потрібна для замощення площі згідно з описаними вимогами.

Examples

Input

3 2 2 2

Output

2

Input

4 2 1 4

Output

2

Обмеження

Full score: 100

Time limit: 100 ms

Real time limit: 5 s

Memory limit: 64M

Я не профі в розв'язуванні олімпіадних задач з програмування, але можливо і мій розв'язок буде комусь корисним. Якщо хтось знає повний розв'язок на 100 балів, додайте його в коментах будь ласка, буду дуже вдячний.

Розв'язок

N, M, K, L = map(int, input().split())
if N%K==0 and M%L==0:
    print((N*M)//(K*L))
elif N%L==0 and M%K==0:
    print((N*M)//(K*L))
elif N%K==0:
    print(N//K*(M//L+1))
elif N%L==0:
    print(N//L*(M//K+1))
elif M%K==0:
    print(M//K*(N//L+1))
elif M%L==0:
    print(M//L*(N//K+1))
else:
    print((M//L+1)*(N//K+1))

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Розв’язок олімпіадної задачі з програмування Площа
Цей сайт використовує cookie для зберігання даних. Продовжуючи використовувати сайт, Ви даєте свою згоду на роботу з цими файлами.
Політика конфіденційності