洛谷要去造房子了。
洛谷有 a 个 A 材料和 b 个 B 材料,造第 i 层楼需要 i 个 A 材料与 i 个 B 材料。
但是洛谷觉得房子不够高,于是他拿出了 c 块钱,每块钱都可以用来买 1 个 A 材料或者 1 个 B 材料。
现在洛谷想知道,他最多能建多少层楼的房子。
第一行三个整数 a,b,c。
一行一个整数,表示洛谷最多能建多少层楼的房子。
1 2 3
2
1 5 3
2
【样例 1 说明】
pigstd 买 2 个 A 材料和 1 个 B 材料后就有 3 个 A 材料和 3 个 B 材料,最多可以建 2 层楼的房子。
(花费 1+2 个 A 材料和 1+2 个 B 材料)
【样例 2 说明】
pigstd 买 3 个 A 材料后就有 4 个 A 材料和 5 个 B 材料,最多可以建 2 层楼的房子。
(花费 1+2 个 A 材料和 1+2 个 B 材料)
【数据规模与约定】
对于 100% 的数据,0≤a,b,c≤1012。
数据点编号 | 满足的条件 |
---|---|
1−4,22 | c=0 |
5−8,21 | a,b,c≤103 |
9−12 | a,b,c≤106 |
13−20 | a,b,c≤1012 |
蒟蒻的代码:
#include <iostream>
#include <cstdio>
#define var long long
using namespace std;
int p[1001];
int main(void)
{
var a, b, c;
cin >> a >> b >> c;
var i;
for(i = 0;; i++)
{
if(a < i + 1 || b < i + 1)
{
break;
}
else
{
a -= i + 1;
b -= i + 1;
}
}
while(true)
{
if(c <= 0)
{
break;
}
else if(a <= b)
{
a++;
c--;
}
else
{
b++;
c--;
}
}
for(;; i++)
{
if(a < i + 1 || b < i + 1)
{
break;
}
else
{
a -= i + 1;
b -= i + 1;
}
}
cout << i << endl;
return 0;
}
6个测试点TLE
P6784