Задача на жадный алгоритм

Задача заключается в том, что нужно рассадить учеников в классе. За каждой партой сидят два школьника. Для каждой парты известен ее уровень «контролируемости», а для каждого ученика – его уровень «послушания». Для улучшения дисциплины нужно посадить учеников, чтобы за каждой партой сидели два школьника:

1)Послушание одного из школьников строго меньше контролируемости этой парты

2)Послушание другого строго больше.

Каждую парту, для которой эти условия удалось выполнить, учительница называет хорошей, другую – плохой. Необходимо составить алгоритм, выясняющий наименьшее количество «плохих» парт.


Ответы (1 шт):

Автор решения: tym32167

Получилось что то типа псевдокода на сишарпе

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

void Main()
{
    var students = new int[] { 1, 2, 3, 4, 4, 6, 7, 8, 9, 19, 4, 5 };
    var desks = new int[] { 4, 5, 6, 7, 8, 30};

    Array.Sort(students);
    Array.Sort(desks);

    int low = 0;
    int high = students.Length  / 2;
    int desk = 0;
    
    int good = 0;

    while (low < students.Length / 2 && high < students.Length && desk < desks.Length)
    {
        var d = desks[desk];
        var l = students[low];
        var h = students[high];

        if (l >= d)
        {
            desk++;
            continue;
        }

        if (h <= d)
        {
            high++;
            continue;
        }

        Console.WriteLine($"We are putting low:{l} and high {h} on desk {d}");
        low++;
        high++;
        desk++;
        good++;
    }

    Console.WriteLine($"Good desks {good}, bad desks {desks.Length - good}");
}

Результат

We are putting low:1 and high 5 on desk 4
We are putting low:2 and high 6 on desk 5
We are putting low:3 and high 7 on desk 6
We are putting low:4 and high 8 on desk 7
We are putting low:4 and high 9 on desk 8
Good desks 5, bad desks 1
→ Ссылка