题解 P6784 【「EZEC-3」造房子】

· · 题解

先分析一下题意:

想法:

实践:

#include<bits/stdc++.h>
using namespace std;
long long a,b,c;
int main(){
    cin>>a>>b>>c;
   if(a==0||b==0){cout<<"0";return 0;}//特殊判断一下
    if(a>b){
        if(a-b>c){
            b+=c,c=0;
        }else{
            c-=a-b,b=a;
        }
    }
    if(a<b){
        if(b-a>c){
            a+=c,c=0;
        }else{
            c-=b-a,a=b;
        }
    }
    a+=c/2;b+=c/2;
    for(long long i=1;i<=max(a,b);i++){
        a-=i;b-=i;
        if(a<i||b<i){
            cout<<i;
            return 0;
        }
    }
}

当然,最后的循环的ab改成ab中较小的那个也行,如:

a=min(a,b)+c/2;
for(long long i=1;i<=min(a,b);i++){
    a-=i;
    if(a<i+1){
        cout<<i<<endl;
        return 0;
    }
}

但好像不会快多快。

好了,这道题的讲解就到此结束,谢谢大家。