Професионална програма
Loading...
+ Нов въпрос
MadHatter avatar MadHatter 2 Точки

Задача "02. Hospital" от "For-Loop - More Exercises" от "PB-More-Exercises".

https://judge.softuni.bg/Contests/Practice/Index/1680#1  - линк към задачата.

https://softuni.bg/downloads/svn/programming-basics-v4/course-content/course-resources/More%20Exercises/5.%20PB-More-For-Loop-Exercises.docx  - линк към условието

Който е решавал Задача "02. Hospital" от "For-Loop - More Exercises" от "PB-More-Exercises". 

Не може да не е забелязал, че вярното решение на задачата според "judge" е напълно не логично. 

По-условие: „Всеки трети ден, болницата прави изчисления и ако броят на не прегледаните пациенти е по-голям от броя на прегледаните, се назначава още един лекар.“

От така написаното условие е логично, че на всеки три дни би трябвало да се сравнява броя  на прегледаните пациенти и броя на не прегледаните пациенти. След което бройката да се нулира, за да се провери за следващите три дни и т.н.

Да, обаче ако напишете кода така, системата за оценяване ви дава грешка. За да я преодолеете се оказва, че трябва да сравнявате  броя  на прегледаните пациенти и броя на не прегледаните пациенти не за последните три дни, а като цяло, но просто на всеки 3 дни.

Което е абсолютно безсмислено, защото ако приемем, че имате 7 лекаря в началото и първия ден имате 100 пациента а на следващите 90 дни 0, вие на всеки 3 дни ще си правите проверката и тя ще показва, че трябва да назначите нов лекар и така накрая ще имате 37 лекаря при 90 дни никакви пациенти. ​​​​​​

Тагове:
0
MiroVatov avatar MiroVatov 1 Точки

Здрасти, 

доста ме поизмъчи задачта, но все пак логиката на задачата си е вярна. Просто твойта логика също е вярна и ще има струпване на повече лекари без работа/пациенти.

Ето го моето решение. Сподели и твоето, да видя кое от двете е по-оптимизирано.

Благодаря.

 

period_days = int(input())
doctor_number = 7
total_threated_patients = 0
total_unthreated_patienst = 0

for i in range(1, period_days + 1):
    daily_threated_patients = 0
    daily_unthreated_patients = 0

    if i % 3 == 0 and total_unthreated_patienst > total_threated_patients:
        doctor_number += 1
    patients_count = int(input())

    if doctor_number >= patients_count:
        daily_threated_patients = patients_count
        daily_unthreated_patients = 0
    if doctor_number < patients_count:
        daily_unthreated_patients = patients_count - doctor_number
        daily_threated_patients = patients_count - daily_unthreated_patients

    total_threated_patients += daily_threated_patients
    total_unthreated_patienst += daily_unthreated_patients

print(f'Treated patients: {total_threated_patients}.')
print(f'Untreated patients: {total_unthreated_patienst}.')







0
MadHatter avatar MadHatter 2 Точки

Когато видя една задача аз си представям, какво се иска от мен, мислейки логично. А решението на тази задача противостои на здравата логика, защото не е логично да назначаваш нови лекари, при положение, че нямаш нужда от тях. Затова и задачата ми не мина с първото – логичното решение, а със второто – не логичното решение.

days = int(input())
doctors = 7
treated_patients = 0
untreated_patients = 0
for period in range(1, days + 1):
    patients_per_day = int(input())
    if period % 3 == 0:
        if untreated_patients > treated_patients:
            doctors +=1
    if patients_per_day <= doctors:
        treated_patients += patients_per_day
    else:
        treated_patients += doctors
        untreated_patients += (patients_per_day - doctors)
print(f'Treated patients: {treated_patients}.')
print(f'Untreated patients: {untreated_patients}.')

0
AlexKadiyski avatar AlexKadiyski 16 Точки

Ето едно решение и за колегите от C#:

 

using System;

namespace _02._Hospital
{
    class Program
    {
        static void Main(string[] args)
        {
            int count = int.Parse(Console.ReadLine());

            int doctors = 7;
            int yesPatient = 0;
            int noPatient = 0;

            for (int i = 1; i <= count; i++)
            {

                if (i % 3 == 0)
                {
                    if (noPatient > yesPatient)
                    {
                        doctors++;
                    }
                }

                int currentPatients = int.Parse(Console.ReadLine());

                if (doctors < currentPatients)
                {
                    yesPatient += doctors;
                    noPatient += currentPatients - doctors;
                }
                else
                {
                    yesPatient += currentPatients;
                }
            }
            Console.WriteLine($"Treated patients: {yesPatient}.");
            Console.WriteLine($"Untreated patients: {noPatient}.");
        }
    }
}

0