题意:给了两种叠塔的同学,一种只能一次用两块砖,另一种用三块砖,而且不同同学叠塔的高度不一样,问叠塔最高的高度的
最小值是多少
这里我们用二分寻找最小值,满足的条件为:假设高度为x, 两块的高度至少要2 * n,三块的高度至少要3 * m,但是有可能有公约数 ,所以n+m <= x / 2 + x / 3 - x / 6
代码:
#include<cstdio>
#include<iostream>
using namespace std;
int n,m;
bool judge(int mid)
{
if(n <= mid / 2 && m <= mid / 3 && (mid / 2 + mid / 3 - mid / 6 >= n + m))
return 1;
else
return 0;
}
int main()
{
cin>>n>>m;
int l = 1,r = 3000000,pos;
while(l <= r)
{
int mid = (l + r) / 2;
if(judge(mid))
{
pos = mid;
r = mid - 1;
}
else
{
l = mid + 1;
}
}
cout<<pos<<endl;
return 0;
}
本文介绍了一种叠塔游戏的算法解决方案,旨在找到使用不同长度砖块的学生们建造的最高塔的最小高度。通过二分查找的方法,在限定的砖块长度下确保每位学生建造的塔高度各不相同。

833

被折叠的 条评论
为什么被折叠?



