UVA 11044 (13.08.07)

来源:互联网 发布:淘宝美工岗位职责 编辑:程序博客网 时间:2024/06/15 16:15

 Searching for Nessy 

The Loch Ness Monsterisa mysterious and unidentified animal said to inhabit Loch Ness, 
a large deep freshwaterloch near the cityof Inverness in northern Scotland. Nessie is usually categorized as a type oflake monster.

http://en.wikipedia.org/wiki/Loch_Ness_Monster


In July 2003, the BBC reported an extensive investigation of Loch Ness by a BBCteam, using 600 separate sonar beams, found no trace of any ¨sea monster¨(i.e., any large animal, known or unknown) in the loch. The BBC team concludedthat Nessie does not exist. Now we want to repeat the experiment.


Given a grid of n rows and m columns representing the loch, 6$ \le$n,m$ \le$10000, find the minimum numbers of sonar beams you must put in the square such that we can control every position in thegrid, with the following conditions:

  • one sonar occupies one position in the grid; the sonar beam controls its own cell and the contiguous cells;
  • the border cells do not need to be controlled, because Nessy cannot hide there (she is too big).

For example,


$\textstyle \parbox{.5\textwidth}{\begin{center}\mbox{}\epsfbox{p11044.eps}\end{center}}$$\textstyle \parbox{.49\textwidth}{\begin{center}\mbox{}\epsfbox{p11044a.eps}\end{center}}$

\epsfbox{p11044b.eps}

where X represents a sonar, and the shaded cells are controlled bytheir sonar beams; the last figure gives us a solution.

Input

The first line of the input contains an integer, t, indicating the number of test cases. For eachtest case, there is a line with two numbers separated by blanks,6$ \le$n,m$ \le$10000, that is, the size of the grid (n rows andm columns).

Output

For each test case, the output should consist of one line showing the minimumnumber of sonars that verifies the conditions above.

Sample Input

 36 67 79 13

Sample Output

 4412

题意: 在湖中设点, 一个点能覆盖周围八个格, 问需要多少个点能覆盖全湖 (除去边缘的格子)

做法: 看过网上的解题代码, 有什么n, n-1, n-2拿去对3去整之类的, 纯属找麻烦!

分析一下, 一个点覆盖九个格, 可占3行3列, 是吧?

那么对于行来说:

3, 4, 5行的情况需要一个点

6, 7, 8行的情况需要两个点

9, 10, 11 需要三个点, 你们看出来了吗?

点数 = 行数 / 3

同理, 对列也一样

所以读取行n, 列m后, 直接 n / 3 * m / 3 就行了


AC代码:

#include<stdio.h>int main() {    int T;    int n, m;    scanf("%d", &T);    while(T--) {        scanf("%d %d", &n, &m);        n = n / 3;        m = m / 3;        printf("%d\n", n*m);    }    return 0;}

原创粉丝点击