Месклиниты собрались в экспедицию ** край света. У них есть корабль, состоящий из N × M...

0 голосов
678 просмотров

Месклиниты собрались в экспедицию на край света. У них есть корабль, состоящий из N × M плотиков, связанных между собой. У каждого плотика есть своя грузоподъемность, а у каждого месклинита – своя масса. На каждом плотике может находиться не более одного месклинита. Если грузоподъемность выбранного плотика меньше массы месклинита, то бедный месклинит утонет при посадке.

Руководитель экспедиции продумывает рассадку по плотикам. Помогите ему определить, какому максимальному количеству месклинитов удастся отправиться в путь.

Входные данные
В первой строке даны числа N и M (1 ≤ N, M ≤ 40). В каждой из последующих N строк содержится по M чисел, обозначающих грузоподъемность соответствующего плотика. В (N+2)-ой строке находится число K (1 ≤ K ≤ 2000) – количество месклинитов. В (N+3)-ей строке содержатся K чисел, i-ое из которых – масса i-ого месклинита. Все массы месклинитов и грузоподъемности плотиков – натуральные числа, не превышающие 109.

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

Пример:
входные данные
3 2
5 10
7 5
5 5
6
9 5 3 5 12 10
выходные данные
4


Информатика (100 баллов) | 678 просмотров
0

И если можно, то на языке c++! Или в крайнем случае Pascal!

0

Кто-то начитался "Mission Gravity" К.Хола? Это конкурсная задача, такие тут запрещены.

0

это задача с информатикса мццме??

0

irka1804, да, с информатикса

Дан 1 ответ
0 голосов
Правильный ответ

#include  
#include
#include
using namespace std;

int main()
{
long long n, m, i, j, k;
cin >> n >> m;
vector < long long > plot, mesk;

for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
{
long long x;
cin >> x;
plot.push_back(x);
}
cin >> k;
for (i = 0; i < k; i++)
{
long long x;
cin >> x;
mesk.push_back(x);
}
sort(plot.begin(), plot.end());
sort(mesk.begin(), mesk.end());

k = 0;
i = plot.size() - 1;
j = mesk.size() - 1;
while (i * j > 0)
{
if (plot[i] >= mesk[j])
{
k++;
i--;
j--;
}
else
j--;
}
cout << k << endl;<br>}

(3.6k баллов)
0

А почему у меня пишет "Ошибка выполнения"? (На информатиксе)

0

значит надо искать ошибку =((

0

строчку while (i * j > 0) замени на ((i+1)*(j+1) > 0)

0

И проверь язык

0

у меня все зашло

0

Cпасибо!