pigstd 要去造房子了。
pigstd 有 a 个 A 材料和 b 个 B 材料,造第 i 层楼需要 i 个 A 材料与 i 个 B 材料。
但是 pigstd 觉得房子不够高,于是他拿出了 c 块钱,每块钱都可以用来买 1 个 A 材料或者 1 个 B 材料。
现在 pigstd 想知道,他最多能建多少层楼的房子。
第一行三个整数 a,b,c。
一行一个整数,表示 pigstd 最多能建多少层楼的房子。
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<bits/stdc++.h>
using namespace std;
long long cnt,sum,s;
int main()
{
long long a,b,c;
cin>>a>>b>>c;
while(a>b&&c!=0)
{
b++;
c--;
}
while(a<b&&c!=0)
{
a++;
c--;
}
while(a==b&&c!=0)
{
if(c%2==0)
{
a+=c/2;
b+=c/2;
c=0;
}else
{
a+=c/2;
b+=c-c/2;
c=0;
}
}
long long d=min(a,b);
cout<<(floor((sqrt(1+8*d)-1)/2))<<endl;
}