有多组数据不超过110组。
每组数据输出一个整数,代表最多能做多少个蛋糕。
1 1000000000 1 1000000000 10 1 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1000000000 1 1 1 1 1 1 1 1 1 1
2000000000 0
周赛的题目……本来完全没想法的,问了学长发现是智障了把n看成1e9了以为绝对不能暴力。一开始把判断合法函数写里面且忘记了是用ans记录答案而不是直接输出mid智障WA多次。写成check()函数就好了,做的第一道二分答案的题目,还是有规律可循的。
代码:
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<stack>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#define INF 0x3f3f3f3f
#define MM(x) memset(x,0,sizeof(x))
#define MMINF(x) memset(x,INF,sizeof(x))
const double PI=acos(-1.0);
const int N=100010;
using namespace std;
typedef long long LL;
LL n,k;
LL a[N],b[N];
bool check(LL mid,LL temp)
{for (int i=1; i<=n; i++){if(b[i]<mid*a[i]){if(mid*a[i]-b[i]<=temp)temp-=(mid*a[i]-b[i]);elsereturn false;;}}return true;
}
int main(void)
{ios::sync_with_stdio(false);int i,j;LL L,R;while (cin>>n>>k){for (i=1; i<=n; i++)cin>>a[i];for (i=1; i<=n; i++)cin>>b[i];L=0,R=2e9+9;LL mid,temp,ans;int flag;while (L<=R){temp=k;mid=(L+R)>>1;if(check(mid,temp)){ans=mid;L=mid+1; }elseR=mid-1; }cout<<ans<<endl; }return 0;
}
本文发布于:2024-02-05 00:54:15,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170720370561564.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |