Дайте мне идею для exersire пожалуйста
Бинарный Поиск (C++)
керамический завод имеет два цеха. Формовочная мастерская и чертежная мастерская. Сначала все изделия формуются из формовочного цеха, затем их передают в чертежный цех для нанесения узоров на изделие перед обжигом. Поскольку эти две мастерские находятся далеко друг от друга, то за один день вся керамика, произведенная за один день, может быть перевезена только один раз из формовочной мастерской в чертежную мастерскую на специальном автомобиле. К счастью, он работает очень быстро, поэтому время доставки считается равным нулю. После окончания чертежа все изделие сразу же будет выпечено (тогда формовочная мастерская будет сидеть и играть, пекарная мастерская будет работать. ).
Формовочная мастерская имеет N мастеров, i ремесленник, делающий продукт, занимает [i] единицу времени. В чертежной мастерской есть M мастеров, j мастеров, которые заканчивают рисовать узоры на изделии, занимает b [j] единиц времени.
Рабочий день длится T единиц времени и в начале как в цехе формовки, так и в чертежном пустуют. Кроме того, в конце рабочего дня в обоих цехах не осталось ни одной продукции (т. е. все изделия закончили как формование, так и волочение деталей).
Какое максимальное количество продукции производят два цеха в день?
Введенные данные:
- Первая строка содержит положительное целое число T (1 ≤ T ≤ 10 ^ 9)
- Вторая строка содержит положительное целое число N (1 ≤ N ≤ 100 000)
- Третья строка содержит N положительных целых чисел a1, a2, ..., an (ai ≤ 10 ^ 9)
- Четвертая строка содержит положительное целое число M (1 ≤ M ≤ 100 000)
- В пятой строке запишите M положительных целых чисел b1, b2, ..., bm (bj ≤ 10 ^ 9)
Результат
- Одно целое число-это максимальное количество изделий, которое может быть выполнено за день двумя цехами.
Например
вход
20
2
4 6
3
2 3 5
выход
5
Что я уже пробовал:
int n,k,a[100005];
проверка bool(int x){
int dem=0;
for(int i=0;i<=n;i++)
dem=dem+a[i]/x;
если(dem>=k)
вернуть true;
возвращать false;
}
int bs(int l,int r)
{
если(l==r)
возвращение л;
int mid=(l+r+1)/2;
if (check(mid)==1)
возвращение БС(середина,Р);
возврат bs(l,mid-1);
}
тап_п()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>a[i];
int l=0,r=1000000000;
cout<<
Richard MacCutchan
Вы написали несколько случайных строк кода, но вы действительно не рассматривали этот вопрос. Начните с написания требований и выясните, как вы переходите от одной точки к другой простыми шагами, принимая во внимание различные ограничения.