题目1 : Farthest Point

时间限制:5000ms

单点时限:1000ms

内存限制:256MB

描述

Given a circle on a two-dimentional plane.

Output the integral point in or on the boundary of the circle which has the largest distance from the center.

输入

One line with three floats which are all accurate to three decimal places, indicating the coordinates of the center x, y and the radius r.

For 80% of the data: |x|,|y|<=1000, 1<=r<=1000

For 100% of the data: |x|,|y|<=100000, 1<=r<=100000

输出

One line with two integers separated by one space, indicating the answer.

If there are multiple answers, print the one with the largest x-coordinate.

If there are still multiple answers, print the one with the largest y-coordinate.

样例输入
1.000 1.000 5.000
样例输出
6 1
// Java版本
import java.util.Scanner;

public class Main {
/*

2
0 0
0 3

1.000 1.000 5.000

 */

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        double x,y,r;
        x=scanner.nextDouble();
        y=scanner.nextDouble();
        r=scanner.nextDouble();

        int ll=(int) (x-r);
        int lr=(int)(x+r);
        int iya,iyb;
        double max=-1;
        double tmp;
        double r2=r*r;
        double result;
        int maxx=(int) x,maxy=(int) y;
        for(int ix=ll; ix<=lr; ++ix){
            //计算对应的iy
            tmp=Math.sqrt(r2-(ix-x)*(ix-x));
            iya=(int) (tmp+y)-1;
            iyb=(int) (y-tmp)-1;
            //System.out.println(iya+"  "+ iyb);
            result =( iyb-y)*( iyb-y)+(ix-x)*(ix-x);
            if(Double.compare(Math.sqrt(result), r)<=0&&Double.compare(result, max)>=0){ //大于等于
                max=result;
                maxx=ix;
                maxy=iyb;
            }

            iyb++;
            result =( iyb-y)*( iyb-y)+(ix-x)*(ix-x);
            if(Double.compare(Math.sqrt(result), r)<=0&&Double.compare(result, max)>=0){ //大于等于
                max=result;
                maxx=ix;
                maxy=iyb;
            }

            iyb++;
            result =( iyb-y)*( iyb-y)+(ix-x)*(ix-x);
            if(Double.compare(Math.sqrt(result), r)<=0&&Double.compare(result, max)>=0){ //大于等于
                max=result;
                maxx=ix;
                maxy=iyb;
            }

            result =( iya-y)*( iya-y)+(ix-x)*(ix-x);
            if(Double.compare(Math.sqrt(result), r)<=0&&Double.compare(result, max)>=0){ //大于等于
                max=result;
                maxx=ix;
                maxy=iya;
            }
            iya++;
            result =( iya-y)*( iya-y)+(ix-x)*(ix-x);

            if(Double.compare(Math.sqrt(result), r)<=0&&Double.compare(result, max)>=0){ //大于等于
                max=result;
                maxx=ix;
                maxy=iya;
            }

            iya++;
            result =( iya-y)*( iya-y)+(ix-x)*(ix-x);
            if(Double.compare(Math.sqrt(result), r)<=0&& Double.compare(result, max)>=0){ //大于等于
                max=result;
                maxx=ix;
                maxy=iya;
            }
        }

        System.out.println(maxx+" "+maxy);
        scanner.close();
    }

   public static void main2(String[] args) {

        Scanner scanner = new Scanner(System.in);
        double x,y,r;
        x=scanner.nextDouble();
        y=scanner.nextDouble();
        r=scanner.nextDouble();

        int ll=(int) (x-r);
        int lr=(int)(x+r);
        int ya=(int) (y+r);
        int yb=(int) (y-r);
        double max=-1;
        double tmp;
        double result;
        double r2=r*r;
        int maxx=(int) x,maxy=(int) y;
        for(int ix=ll; ix<=lr; ++ix){
            //计算对应的iy

            for( int iy=yb; iy<=ya; ++iy){
                result =( iy-y)*( iy-y)+(ix-x)*(ix-x);
                if(Double.compare(result, r2)<=0){ //如果在里面
                    if(Double.compare(result, max)>=0){
                        max=result;
                        maxx=ix;
                        maxy=iy;
                    }
                }
            }
        }

        System.out.println(maxx+" "+maxy);
        scanner.close();
    }
}
时间: 2024-10-20 18:44:01

题目1 : Farthest Point的相关文章

微软2016 9月笔试

全场梦游..考研狗好久没码题了已经跪了T T 被自己蠢哭 题目1 : Farthest Point 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 Given a circle on a two-dimentional plane. Output the integral point in or on the boundary of the circle which has the largest distance from the center. 输入 One li

怒刷leetcode的题目(1)237、104、136、100

https://leetcode.com/problemset/algorithms/上面的题目,每天做几道题目,大体从准确率高至低做下去 编程语言为c语言,因为跑的最快- 237 Delete Node in a Linked List 47.8% Easy Write a function to delete a node (except the tail) in a singly linked list, given only access to that node. Supposed t

Farthest Nodes in a Tree (求树的直径)

题目链接,密码:hpu Description Given a tree (a connected graph with no cycles), you have to find the farthest nodes in the tree. The edges of the tree are weighted and undirected. That means you have to find two nodes in the tree whose distance is maximum a

四则运算题目生成程序

a.需求分析 看了大家对于本课程的目标和规划,很多同学都希望能提高自己的实践能力,没有捷径可走,就是练习.练习再练习!那么就从第一个个人项目开始吧,用一周的时间完成一个基于控制台的四则运算程序,实现一个自动生成小学四则运算题目的命令行程序 从<构建之法>第一章的 "程序" 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 =

四则运算题目生成程序(基于控制台)

题目描述: 能自动生成小学四则运算题目的命令行 "软件",满足以下需求: 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24 运算符为 +, ?, ×, ÷ 并且要求能处理用户的输入,并判断对错,打分统计正确率 要求能处理用户输入的真分数, 如 1/2, 5/12 等 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目 功能设计: 1.  通过随机数的生成,实现+, ?, ×, ÷的确定 2.  +, ?, ×, ÷分别赋予整

记一次坑die(误)的题目--HDU2553--(DFS)

,N皇后问题   Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 720 Accepted Submission(s): 417 Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上.你的任务是,对于给定的N,求出有多少种合

九度oj 题目1552:座位问题

题目描述: 计算机学院的男生和女生共n个人要坐成一排玩游戏,因为计算机的女生都非常害羞,男生又很主动,所以活动的组织者要求在任何时候,一个女生的左边或者右边至少有一个女生,即每个女生均不会只与男生相邻.现在活动的组织者想知道,共有多少种可选的座位方案. 例如当n为4时,共有 女女女女, 女女女男, 男女女女, 女女男男, 男女女男, 男男女女, 男男男男7种. 输入: 输入包含多组测试用例,每组测试用例仅包含一个整数n(1<=n<=1000). 输出: 对于每组测试用例,输出一个数代表可选的方

201301 JAVA题目0-1级

题目描述 编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true:不满足时返回false. 输入描述: 第一行是数据个数,第二行是输入的数据 输出描述: 返回true或者false 输入例子: 4 1 5 -5 1 输出例子: true 1 import java.util.*; 2 3 public class Main46 { 4 public

九度oj 题目1499:项目安排

题目描述: 小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时间,假设做完每个项目后,拿到报酬都是不同的.由于小明马上就要硕士毕业了,面临着买房.买车.给女友买各种包包的鸭梨,但是他的钱包却空空如也,他需要足够的money来充实钱包.万能的网友麻烦你来帮帮小明,如何在最短时间内安排自己手中的项目才能保证赚钱最多(注意:做项目的时候,项目不能并行,即两个项目之间不能有时间重叠,但是一个项目刚结束,就可以立即做另一个项目,即项目起止时间点可以重叠). 输