这道题也是一道水题,其实就考验了简单的数学知识。

原题地址:http://poj.org/problem?id=1005

POJ 1005 一艘可以住的船

问题描述

Fred Mapper 正在考虑在路易斯安那州购买一些土地来建他自己的房子。在研究土地的过程中,他发现,路易斯安那州的土地每年都会被密西西比河侵蚀掉 50 平方里。因为 Fred 希望在这个房子里度过余生,所以他需要知道他的那些土地是否会被侵蚀掉。

在做了更多的调查之后,Fred 发现这些土地是以半圆的形状被侵蚀的。这个半圆所对应的正圆的圆心在坐标原点 (0, 0), 坐标轴 x 轴将这个圆切成两半。在 x 轴下方的区域是河流。在第一年刚开始的时候,这个半圆的面积是 0.(半圆如图所示。)

POJ 1005 I Thing I Need a Houseboat

输入

输入数据的第一行是一个正整数 N, 它说明了接下来会有多少组数据。接下来的 N 行中的每一行,都会包含 Fred 正在考虑的那块土地的笛卡尔坐标 (Cartesian coordinate) X 和 Y. 这两个数都是以 (mile) 为单位的浮点型数据。坐标 Y 将会是一个非负数。原点 (0, 0) 将不会出现在输入中。

输出

对于每组输入,对应一行的输出。这一行应该采用这样的形式:“Property N: This property will begin eroding in year Z.”此处的 N 是数据的组数(从 1 开始),而 Z 表示,这块土地从第 Z 年的年末开始,就一直处于这个被侵蚀的半圆中。在最后一组输出之后,程序还要输出“END OF OUTPUT.”字样。

样例输入

2
1.0 1.0
25.0 0.0

样例输出

Property 1: This property will begin eroding in year 1.
Property 2: This property will begin eroding in year 20.
END OF OUTPUT.

注释

  1. 给出的点不会刚好在半圆的边界处:它要么在半圆里,要么在半圆外。
  2. 这个题目会被自动评测,你的答案必须完全正确,包括大小写 (capitalization), 标点符号 (punctuation), 和空格 (white-space). 包括行末的句号。
  3. 所有地点的坐标单位都是以英里计的。

解题思路

首先,设 t 是年份,那么第 t 年,半圆的面积是 [latex] A = \frac{1}{2}\pi r^2 = 50t [/latex]. 然后侵蚀半径显然是 [latex] r = \sqrt{x^2+y^2} [/latex]. 最后解出 [latex] t = \frac{1}{100} \pi (x^2+y^2) [/latex]. 注意此处的 t 应该是向上取整的。

源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int count = cin.nextInt();
        double x = 0.0, y = 0.0;
        for (int i = 1; i <= count; ++i) {
            x = cin.nextDouble(); y = cin.nextDouble();
            int year = (int)(Math.ceil((Math.PI * (x * x + y * y)) / 100.) + .5);
            System.out.print("Property " + i + ": ");
            System.out.print("This property will begin eroding in year ");
            System.out.println(year + ".");
        }
        System.out.println("END OF OUTPUT.");
    }
}

原创文章,转载请注明来源:http://euyuil.com/2320/poj-1005-i-think-i-need-a-houseboat/