Cá Choco Ответов: 2

Дайте мне идею для 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

Вы написали несколько случайных строк кода, но вы действительно не рассматривали этот вопрос. Начните с написания требований и выясните, как вы переходите от одной точки к другой простыми шагами, принимая во внимание различные ограничения.

2 Ответов

Рейтинг:
2

KarstenK

это задача оптимизации с двумя функциями

int shaped = shapeWorkshop( input);
int timeShape = getShapeTime(shaped);
int timeDraw = T_WORK_DAY - timeShape;
int drawed = drawWorkshop(count, timeDraw );
int timeDraw = getShapeTime(shaped);

if( timeShape + timeDraw <= T_WORK_DAY ) {
  print("not full day worked");
}
Затем используйте более высокий входной сигнал


Рейтинг:
0

OriginalGriff

Мы более чем готовы помочь тем, кто застрял, но это не значит, что мы здесь, чтобы сделать все это для вас! Мы не можем сделать всю работу, вам либо платят за это, либо это часть ваших оценок, и было бы совсем несправедливо, если бы мы сделали все это за вас.

Поэтому нам нужно, чтобы вы сделали работу, и мы поможем вам, когда вы застряли. Это не значит, что мы дадим вам пошаговое решение, которое вы можете сдать!
Начните с объяснения, где вы находитесь в данный момент и каков следующий шаг в этом процессе. Затем расскажите нам, что вы пытались сделать, чтобы этот следующий шаг сработал, и что произошло, когда вы это сделали.

Если у вас вообще возникли проблемы с началом работы, то это может помочь: Как написать код для решения проблемы, руководство для начинающих[^]