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; } }