https://codeforces.com/contest/670/problem/D1
This problem is given in two versions that differ only by constraints. If you can solve this problem in large constraints, then you can just write a single solution to the both versions. If you find the problem too difficult in large constraints, you can write solution to the simplified version only.
Waking up in the morning, Apollinaria decided to bake cookies. To bake one cookie, she needs n ingredients, and for each ingredient she knows the value ai — how many grams of this ingredient one needs to bake a cookie. To prepare one cookie Apollinaria needs to use all ningredients.
Apollinaria has bi gram of the i-th ingredient. Also she has k grams of a magic powder. Each gram of magic powder can be turned to exactly 1 gram of any of the n ingredients and can be used for baking cookies.
Your task is to determine the maximum number of cookies, which Apollinaria is able to bake using the ingredients that she has and the magic powder.
Input
The first line of the input contains two positive integers n and k (1 ≤ n, k ≤ 1000) — the number of ingredients and the number of grams of the magic powder.
The second line contains the sequence a1, a2, ..., an (1 ≤ ai ≤ 1000), where the i-th number is equal to the number of grams of the i-th ingredient, needed to bake one cookie.
The third line contains the sequence b1, b2, ..., bn (1 ≤ bi ≤ 1000), where the i-th number is equal to the number of grams of the i-th ingredient, which Apollinaria has.
Output
Print the maximum number of cookies, which Apollinaria will be able to bake using the ingredients that she has and the magic powder.
Examples
input
3 1
2 1 4
11 3 16
output
4
input
4 3
4 3 5 6
11 12 14 20
output
3
Note
In the first sample it is profitably for Apollinaria to make the existing 1 gram of her magic powder to ingredient with the index 2, then Apollinaria will be able to bake 4 cookies.
In the second sample Apollinaria should turn 1 gram of magic powder to ingredient with the index 1 and 1 gram of magic powder to ingredient with the index 3. Then Apollinaria will be able to bake 3 cookies. The remaining 1 gram of the magic powder can be left, because it can't be used to increase the answer.
题目大意:
有n种材料,有k个魔法材料,魔法材料可以变成任意材料。接下来一行n个数表示制作一个饼干每种材料需要多少对应的数目。接下来一行n个数表示有对应每种材料的数目。
思路:
1、二分查找枚举出一个可行解,进行判断,直到不能二分为止。
2、判断当前mid值是否可行:将每一种物品的拥有量-mid*每一种物品的需求量.然后将负值统计出来,明显这些负值就是需要这k个魔法材料去填补的量,如果负值和小于等于
k,那么就说明这k个魔法材料足够填补空缺,那么这就是一个可行解,否则不可行。
3、一直二分下去,输出最终解。
#include<stdio.h>
#include<string.h>
using namespace std;
int need[1008];
int have[1008];
int tmpp[1008];
int n,k;
int Slove(int mid)
{
for(int i=1;i<=n;i++)
{
tmpp[i]=have[i]-mid*need[i];
}
int sum=0;
for(int i=1;i<=n;i++)
{
if(tmpp[i]<0)sum+=-tmpp[i];
}
if(sum<=k)return 1;
else return 0;
}
int main()
{
while(~scanf("%d%d",&n,&k))
{
for(int i=1;i<=n;i++)
{
scanf("%d",&need[i]);
}
for(int i=1;i<=n;i++)
{
scanf("%d",&have[i]);
}
int ans=0;
int mid;
int l=0;
int r=10000;
while(r>=l)
{
mid=(l+r)/2;
if(Slove(mid)==1)
{
ans=mid;
l=mid+1;
}
else
{
r=mid-1;
}
}
printf("%d\n",ans);
}
}