二分
- 分巧克力
- 求阶乘
- 计算方程
分巧克力
分巧克力
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {Scanner scan = new Scanner(System.in);//在此输入您的代码...int n=scan.nextInt();int k=scan.nextInt();//小朋友int[][] area=new int[n][2];for(int i=0;i<n;i++){int h=scan.nextInt();int w=scan.nextInt();area[i][0]=h;area[i][1]=w;}System.out.println(function(area,k));scan.close();
}static int function(int[][]area,int k){int l=1;//巧克力边长最小为lint r=(int) 1e5;//边长最大为rint mid=0;while(l<r) {mid=(l+r+1)/2;if(check(area,mid)>=k) {//取满足条件的最大边长,满足条件时动l,所以循环条件时>=l=mid;}else {r=mid-1;}}return l;}//判断边长为mid的巧克力,可以分成几块private static int check(int[][]area,int mid) {// TODO Auto-generated method stubint res=0;for(int i=0;i<area.length;i++) {res+=(area[i][0]/mid)*(area[i][1]/mid);}return res;}
}
求阶乘
求阶乘
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {
public static void main(String[] args) {Scanner scan = new Scanner(System.in);//在此输入您的代码...long k=scan.nextLong();long l=0;//最小是0!long r=(long) 1e19;//最大是1e19 !while(l<r){//long mid=(l+r)>>1;if(check(mid)>=k){//找满足条件的最小N,满足条件时动r,所以执行r=mid,所以条件是>=r=mid;}else{l=mid+1;}}if(check(r)==k){System.out.println(r);}else{System.out.println(-1);}scan.close();}//检查一下数字num的阶乘末尾的0的个数static long check(long num){long res=0;while(num!=0){res+=num/5;num/=5;}return res;}
}
计算方程
计算方程
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);//在此输入您的代码..int t=scan.nextInt();for(int i=0;i<t;i++){int k=scan.nextInt();int m=scan.nextInt();System.out.println(func(k,m));}scan.close();}static int func(int k,int m){int l=1,r=(int)1e8,mid;while(l<r){mid=(l+r)/2;if(check(mid,k,m)){r=mid;}else {l=mid+1;}}return l;}static boolean check(int x,int k,int m){return Math.sqrt(x)+(int)(Math.log(x)/Math.log(k))>m;}}