均分巧克力

题目描述

爱吃甜食的兔兔在冰箱里放了许多大块巧克力,然而算法小朋友们惦记了好久。本着平均分配的原则,兔兔打算将n大块巧克力平均分给k个小朋友。
由于兔兔不会计算长方体的体积,采用了最简单粗暴的切割方式,兔兔跟小朋友们约定将巧克力切割成边长相等且为整数的正立方体小块,这样大家得到的巧克力就相同了(多余的部分兔兔就可以留给自己吃了●_●)。
但是聪明的小朋友们立刻根据每块巧克力的长宽高,计算出可以切割成的最大正方体体积,你就是小朋友中的一员,请你计算出你可以分得的巧克力体积(切割时不考虑巧克力受热损耗,不允许拼接巧克力)。

输入格式

第一行两个正整数 n n n k k k
接下来n行,每行三个正整数 a , b , c a,b,c a,b,c 表示每块巧克力的长宽高。

输出格式

一个正整数表示小朋友分得的最大正方体体积。

样例 #1

样例输入 #1

2 5
3 5 6
6 6 8

样例输出 #1

27

提示

50 50 50% 的数据 1 ≤ n , k ≤ 10 1≤n,k≤10 1n,k10 , 1 ≤ a , b , c ≤ 50 1≤a,b,c≤50 1a,b,c50
100 100 100% 的数据 1 ≤ n , k , a , b , c ≤ 1 0 5 1≤n,k,a,b,c≤ 10^{5} 1n,k,a,b,c105
思考1:兔兔刀比较钝,每次切割有单位1的损耗如何做
思考2:兔兔接受建议,边长可以切割小数如何做
思考3:兔兔学会了计算长方体体积,允许将巧克力分成长方体如何做(仍然不允许拼接巧克力)

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N],b[N],c[N],n,k; 
bool chk(int x)
{
	int i;
	long long cnt=0;
	for(int i=1;i<=n;i++)
	{
		cnt+=1LL*(a[i]/x)*(b[i]/x)*(c[i]/x);
		if(cnt>=k)
		{
			return true;
		}
	}
	return false;
}
int main()
{
	int i,l,r,mid;
	long long ans=0;
	cin>>n>>k;
	for(i=1;i<=n;i++)
	{
		cin>>a[i]>>b[i]>>c[i];
	}
	l=1;
	r=100000;
	while(l<=r)
	{
		mid=(l+r)/2;
		if(chk(mid))
		{
			ans=1LL*mid*mid*mid;
			l=mid+1;
		}
		else
		{
			r=mid-1;
		}
	}
	cout<<ans;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值