CodeForces

来源:互联网 发布:whatsapp mac版 编辑:程序博客网 时间:2024/06/08 04:15

胡大加工厂要组装一种产品。组装该产品需要n种零件,每组装一个该产品需要第i种零件ai个。胡大有第i种零件bi个。此外,胡大还有一种特殊的零件,每个特殊零件可以当作任意一个其它零件使用。那么问题来了,胡大最多一共可以组装多少个该产品?

Input

对于每个样例:

第一行包括两个正整数n 、k (1 ≤ n, k ≤ 1000),组成该产品需要的零件的种类数和胡大有的特殊零件的数量

第二行包含n个数a1, a2, ..., an (1 ≤ ai ≤ 1000),第i个数代表组装一个该产品需要第i种零件的数量

第三行包含b个数b1, b2, ..., bn (1 ≤ bi ≤ 1000),第i个数代表胡大拥有的第i种零件的数量

Output

每个样例一行,包含胡大用所有的零件(包括特殊零件)可以组装的该产品的最大数量。

Sample Input

3 1
2 1 4
11 5 15

4 3
4 3 5 5
11 11 14 20
 

Sample Output

4
3
 


思路:感觉和以前做过的cf中的div2 A中的类型比较像;

记录不用K零件之前的组装该产品各个种类的数量,记录需要补齐的最小数量,sort就可以;

#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define max_n 1010using namespace std;typedef long long LL;struct node{int a;int b;int c;int d;}s[max_n];bool cmp(node x,node y){if(x.c!=y.c) return x.c<y.c;return x.d>y.d;}int main(){int n,k,ans;scanf("%d %d",&n,&k);for(int i=0;i<n;i++)scanf("%d",&s[i].a);for(int i=0;i<n;i++){scanf("%d",&s[i].b);s[i].c=s[i].b/s[i].a;s[i].d=s[i].a-s[i].b%s[i].a;}sort(s,s+n,cmp);while(k){s[0].d--;if(s[0].d==0){s[0].d=s[0].a;s[0].c++;}sort(s,s+n,cmp);//注意这个sort位置; ans=s[0].c;k--;}printf("%d\n",ans);return 0;}

原创粉丝点击