CF A. Creating a Character

题目描述:给你两个整数a,b,在给你一个整数n,将n分配给a,b使得a>b
  1<=a,b<=1e8,   0<=n<=1e8
分析:很容易想到二分查找最少的值c给a使得c+a>n-c+b(实现的时候还是wa了几发。太弱了)
ac代码
#include <bits/stdc++.h>
using namespace std;
int n;
int a,b;
int solve(){
    int l=0,r=n,mid=(l+n)>>1;
    while(l<r){//不能写等于。因为相等时向下取的话就会死循环
        if(a+mid>b+n-mid){
            r=mid;
            mid=(l+mid)>>1;
        }
        else {
            l=mid+1;
            mid=(mid+r)>>1;
        }
    }
    if(l+a<=n-l+b) return n-l;//因为没有写等于所以要单独考虑这个点的情况
    else return n-l+1;
}
int main(){
    int t;
    cin>>t;
    while(t--){
        cin>>a>>b>>n;
        cout<<solve()<<endl;
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务