CodeForces 991C Candies(二分答案)

题目

题意:给出糖果得数目n,A每次吃k个,B每次吃10%,求A至少吃n/2个的K的最小值。

思路:开始想的是check直接暴力,感觉会超时,结果没有超时,每次10%,基本上一次check就运行十几次,所以不会超时

AC代码:

package 练习;
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class 练习 {
 static long n, ans;
 static boolean check(long k){
     long x=n, cnt=0;
     while (x>0){
         cnt +=Math.min(x,k);//x
         x-=k;
         x-=x/10;
     }
     return cnt>=(n+1)/2;//注意奇数
 }
 public static void main(String[] args) {
  Scanner sc=new Scanner(System.in);
     n=sc.nextLong();
     long l=1, r=(n+1)/2, m=(l+r)/2;
     while (l<r){
         if (check(m)) ans = r = m;
         else l=m+1;
         m=(l+r)/2;
     }
     if (ans==0) ans = 1;//n = 1的特殊情况
     System.out.println(ans);
 }
}

你可能感兴趣的:(二分,双指针)