Submission #857316

#TimeUsernameProblemLanguageResultExecution timeMemory
857316StefanSebezSelf Study (JOI22_ho_t2)C++14
0 / 100
749 ms5104 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int inf=1e18;
signed main()
{
    int n,m;cin>>n>>m;
    int a[n+1],b[n+1];
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=n;i++)cin>>b[i];
    int l=1,r=inf,mid=l+(r-l)/2,res=0;
    while(l<=r)
	{
		//printf("%lld %lld %lld: ",l,mid,r);
		int sum=0;
		for(int i=1;i<=n;i++)
		{
			int x,z,k=inf;
			if(a[i]<=b[i])
			{
				x=0;
				z=(mid-x*(a[i]-b[i])+b[i]-1)/b[i];
				k=max(x,z);
			}
			else
			{
				x=mid/a[i];
				if(x>m) x=m;
				z=(mid-x*(a[i]-b[i])+b[i]-1)/b[i];
				k=min(k,max(x,z));
				x++;
				if(x>m) x=m;
				z=(mid-x*(a[i]-b[i])+b[i]-1)/b[i];
				k=min(k,max(x,z));
			}
			sum+=k;
			/*int k1=inf;
			for(int j=0;j<=m;j++)
			{
				int z=ceil((double)(mid-j*(a[i]-b[i]))/b[i]);
				k1=min(k1,max(j,z));
			}*/
			/*int x=0;
			if(a[i]>b[i])x=min(mid/(a[i]-b[i]),m);
			sum+=ceil((mid-x*(a[i]-b[i]))/b[i]);*/
			//cout<<"|"<<k<<" "<<k1<<"| ";
		}
		//cout<<endl;
		if(sum<=n*m)
		{
			res=mid;
			l=mid+1;
		}
		else r=mid-1;
		mid=l+(r-l)/2;
	}
	cout<<res<<endl;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...