60分求助
查看原帖
60分求助
376623
AnotherStruggleDay楼主2020/8/26 10:42
#include<iostream>
using namespace std;

void swap(long long a,long long b);
int main()
{
    long long a,b,c;
    cin>>a>>b>>c;
  //每盖一层AB消耗相同,
  //为了方便就把值小的当作A
    if(a>b) swap(a,b);
    else if(a<b)
    {
       //把c全部补给A
        if(a+c<b)
        {
            a=a+c;
            c=0;
        }//a+c>=b先把A补成和B一样多
        else
        {
            c=c-(b-a);
            a=b;
        }
    }
    a+=c/2;    b+=c/2;//平分剩余的C
    long long l,r;
    l=1,r=2000000;//二分法找层数mid
    while(l<r)
    {
        long long mid=(l+r+1)/2;
        double x;
        x=(mid+1)*(mid*1.0)/2.0;
        if(x<=a)
        {
            l=mid;
        }
        else r=mid-1;
    }
    cout<<l<<endl;
    return 0;
}

void swap(long long a,long long b)
{
    long long temp=a;
    a=b;
    b=temp;
}

能力有限 不知道再该怎么改了

2020/8/26 10:42
加载中...