题目链接:http://www.codeforces.com/contest/626/problem/C
题意是有一群小朋友在堆房子,现在有n个小孩每次可以放两个积木,m个小孩,每次可以放3个积木,最后每个小孩堆得高度都不同,求最大的高度最小是多少;
例如n = 4,m = 2;
所有高度分别为2,4,6,8, 3,9;所以答案是9;
我们可以用二分搜索答案,当num满足所有高度都不同时,必须满足num以内的2的倍数的个数大于n,3的倍数的个数大于m,2的倍数的个数+3的倍数的个数-6的倍数的个数大于m+n;
所以只要我们找到最小的num即可;
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <stack> #include <queue> #include <map> #include <vector> using namespace std; typedef long long LL; #define PI 4*atan(1.0) #define N 550 #define met(a, b) memset(a, b, sizeof(a)) int main() { int n, m; while(scanf("%d %d", &n, &m)!=EOF) { int L = 1, R = 10000000, ans; while(L<=R) { int Mid = (L+R)/2; if(Mid/2>=n && Mid/3>=m && Mid/2+Mid/3-Mid/6>=m+n) R = Mid-1, ans = Mid; else L = Mid+1; } printf("%d ", ans); } return 0; }