• 杭电oj 4004---The Frog Games java解法


    import java.util.Arrays;

    import java.util.Scanner;

    //杭电oj 4004

    //解题思路:利用二分法查找,即先选取跳跃距离的区间,从最大到最小,

    //然后去中值,并依次到judgeHigh函数判断是否满足条件,然后逐步逼近最终答案

    public class Main {

        public static void main(String[] args) {

            Scanner in=new Scanner(System.in);

            while (in.hasNext()) {

                int L=in.nextInt();

                int n=in.nextInt();

                int m=in.nextInt();

                int[] stones=new int[n];

                for (int i = 0; i < n; i++) {

                    stones[i]=in.nextInt();

                }    

                int[] p=new int[n+2];

                p[0]=0;

                p[n+1]=L;

                for (int i = 0; i < stones.length; i++) {

                    p[i+1]=stones[i];

                }

                Arrays.sort(p);

                int left=L/m;

                int right=L;

                while (left<=right) {

                    int mid=left+(right-left)/2;

                    if (judgeHigh(p,mid,m)) {

                        right=mid-1;//取小

                    }else {

                        left=mid+1;//取大

                    }

                }

                System.out.println(left);

            }

          

            

        }

        public static boolean judgeHigh(int[] d,int max,int m) {//判断中值是否大于最小可跳距离

            int last=d[0];

            int count=0;//jump's nums of times

            for (int i = 1; i <d.length; i++) {

                if (d[i]-d[i-1]>max) {//如果大于最大值,说明这个距离不是最远距离,得增大

                    return false;

                }

                if (d[i]-last>max) {//中间隔几个石头判断是否大于最大值,如果大于,则取更靠后的石头,否则就落在前一个石头上

                    count++;

                    last=d[i-1];

                    if (count>=m) {

                        return false;

                    }

                }

            }

            return true;

        }

    }

  • 相关阅读:
    Remote Desktop manager 连接后无法自动登录
    .net framework 源码调试 与 问题解决
    SQLSever--基础学习--创建登录用户&创建数据库用户&分配权限
    sql server 2008 数据库管理系统使用SQL语句创建登录用户步骤详解
    python 脚本备份mssql数据库并删除数据库
    python 脚本bak文件还原mssql数据库
    python3 爬虫利用Requests 实现下载进度条
    MySQL的四种事务隔离级别
    查看mysql的版本号
    haproxy 配置文件详解 之 backend
  • 原文地址:https://www.cnblogs.com/GavinYGM/p/10544413.html
Copyright © 2020-2023  润新知