Codeforces 626C Block Towers 【二分】
2016-02-14 16:54
405 查看
C. Block Towers
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Students in a class are making towers of blocks. Each student makes a (non-zero) tower by stacking pieces lengthwise on top of each other. n of
the students use pieces made of two blocks and m of the students use pieces made of three blocks.
The students don’t want to use too many blocks, but they also want to be unique, so no two students’ towers may contain the same number of blocks. Find the minimum height necessary for the tallest of the students' towers.
Input
The first line of the input contains two space-separated integers n and m (0 ≤ n, m ≤ 1 000 000, n + m > 0) —
the number of students using two-block pieces and the number of students using three-block pieces, respectively.
Output
Print a single integer, denoting the minimum possible height of the tallest tower.
Examples
input
output
input
output
input
output
Note
In the first case, the student using two-block pieces can make a tower of height 4, and the students using three-block pieces can
make towers of height 3, 6,
and 9 blocks. The tallest tower has a height of 9 blocks.
In the second case, the students can make towers of heights 2, 4,
and 8 with two-block pieces and towers of heights 3 and 6 with
three-block pieces, for a maximum height of 8 blocks.
题意:有n个人用2米高的木板堆塔,有m个人用3米高的木板堆塔。木板可以随便使用,要求任意两人堆成塔的高度不一,问满足该条件下所有人堆成塔的最大高度的最小值。
思路:最...的最...,二分就好了。
AC代码:
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Students in a class are making towers of blocks. Each student makes a (non-zero) tower by stacking pieces lengthwise on top of each other. n of
the students use pieces made of two blocks and m of the students use pieces made of three blocks.
The students don’t want to use too many blocks, but they also want to be unique, so no two students’ towers may contain the same number of blocks. Find the minimum height necessary for the tallest of the students' towers.
Input
The first line of the input contains two space-separated integers n and m (0 ≤ n, m ≤ 1 000 000, n + m > 0) —
the number of students using two-block pieces and the number of students using three-block pieces, respectively.
Output
Print a single integer, denoting the minimum possible height of the tallest tower.
Examples
input
1 3
output
9
input
3 2
output
8
input
5 0
output
10
Note
In the first case, the student using two-block pieces can make a tower of height 4, and the students using three-block pieces can
make towers of height 3, 6,
and 9 blocks. The tallest tower has a height of 9 blocks.
In the second case, the students can make towers of heights 2, 4,
and 8 with two-block pieces and towers of heights 3 and 6 with
three-block pieces, for a maximum height of 8 blocks.
题意:有n个人用2米高的木板堆塔,有m个人用3米高的木板堆塔。木板可以随便使用,要求任意两人堆成塔的高度不一,问满足该条件下所有人堆成塔的最大高度的最小值。
思路:最...的最...,二分就好了。
AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <string>
#define INF (2000000000+10)
#define eps 1e-8#define MAXN (200000+10)
#define MAXM (600000+10)
#define Ri(a) scanf("%d", &a)
#define Rl(a) scanf("%lld", &a)
#define Rf(a) scanf("%lf", &a)
#define Rs(a) scanf("%s", a)
#define Pi(a) printf("%d\n", (a))
#define Pf(a) printf("%.2lf\n", (a))
#define Pl(a) printf("%lld\n", (a))
#define Ps(a) printf("%s\n", (a))
#define W(a) while((a)--)
#define CLR(a, b) memset(a, (b), sizeof(a))
#define MOD 1000000007
#define LL long long
#define lson o<<1, l, mid
#define rson o<<1|1, mid+1, r
#define ll o<<1
#define rr o<<1|1
#define PI acos(-1.0)
#pragma comment(linker, "/STACK:102400000,102400000")
#define fi first
#define se second
using namespace std;
typedef pair<int, int> pii;
bool judge(int o, int n, int m)
{
int num1 = o / 2;
int num2 = o / 3;
int num3 = o / 6;
return n <= num1 && m <= num2 && n + m <= num1 + num2 - num3;
}
int main()
{
int n, m; Ri(n); Ri(m);
int l = 0, r = 8000000, ans;
while(r >= l)
{
int mid = (l + r) >> 1;
if(judge(mid, n, m))
{
ans = mid;
r = mid-1;
}
else
l = mid+1;
}
Pi(ans);
return 0;
}
相关文章推荐
- Codeforces 626B Cards 【BFS or 讨论】
- Visual Studio 2008 可扩展性开发(三):Add-In运行机制解析(下)
- Codeforces 626A Robot Sequence 【水题】
- JS中判断相等的方法(underscore中eq方法源码分析)
- Matrix Mathematics
- hdoj 5627 Clarke and MST 【最大and生成树】
- hdoj 5626 Clarke and points 【思维】
- MIPS GCC 嵌入式汇编
- Dell 服务器阵列扩容【经验分享(转)】
- hdoj 4666 Hyperspace 【最远曼哈顿距离】
- Hadoop 源码目录树
- poj 2926 Requirements 【5维点集最远曼哈顿距离】
- H5移动web页面触摸按钮效果实现-模拟按钮hover效果实现
- Visual Studio 2008 可扩展性开发(三):Add-In运行机制解析(上)
- Light OJ 1231 1232 1233 Coin Change (DP)
- Notification与应用启动
- zabbix Server端在CentOS6.5上的安装过程
- CoordinatorLayout布局中要注意的问题
- Oracle DATABASE LINK(DBLINK)创建与删除方法
- WPS中如何自动生成文件目录