【题解】三角形套娃
题意
有种边长为
个数为
的等边三角形。边长小的三角形可以放入边长大的里面。还需要一个三角形,将所有的三角形可以放入其中,问这个三角形的边长是多少。
题解
首先若大三角形的边长是小三角形的两倍,则一个大三角形可以放入4个小三角形。由于给定的种是边长不相同的三角形们,所以我们可以对于某一种三角形判断其需要多少个别的三角形来装入,对于当前这个三角形的数量,我们第一次除以4向上取整就是需要比他边长大一倍的的三角形的个数了,我们再继续除以4向上取整这样除几次我们就可以得到能装下当前这个三角形所需要的最大三角形边长了。对于给定的每个小三角形,我们都求一个他所需要的最大三角形边长,答案为这些值中的最大值。两种数量的三角形无关是因为,两次枚举实际存在可以复用的关系,所以我们取所有值的最大值即可。
复杂度
时间复杂度为
代码
#include<bits/stdc++.h> using namespace std; map<int,long long> mp; int main() { int n; scanf("%d",&n); int ans = 0; for(int i=0; i<n; i++) { int a,b; scanf("%d%d",&a,&b); if(b == 1) a++; while(b > 1) { int tmp = (b%4 == 0) ? b/4 : b/4+1; b = tmp; a++; } ans = max(ans,a); } printf("%d\n",ans); return 0 ; }