杭电Acm-1046解题心得

这道题目,我刚看的时候,就觉得是DFS,结果用DFS解决的时候,总是TLE。后来百度了一下,才发现,被出题者给忽悠了。这道题目其实并不是DFS,而且寻找简单的规律。规律非常简单,我在思考的过程中,也有想过,只是不敢相信,会如此简单。规律如下:
  1. 对于m和n至少有一个是偶数的情况,结果就为m*n
  2. 对于m和n都为奇数的情况,结果为:m*n + 0.41(0.41 = sqrt(1 + 1)  - 1)
这样,代码实现,才是最最简单的:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {

		StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        in.nextToken();
        int cases = (int)in.nval;
        int index = 1;
        while (index <= cases) {
        	in.nextToken();
        	int m = (int)in.nval;
        	in.nextToken();
        	int n = (int)in.nval;
        	out.println("Scenario #" + index++ + ":");
        	if (1 == m % 2 && 1 == n % 2)
        		out.println(m * n + 0.41);
        	else 
        		out.println(m * n + ".00");
        	out.println();
        }
        out.flush();
        out.close();
	}
}


这个题目,并不难,但要求我们能够善于发现规律。不能一味的陷入一下常规的解决问题的思路中。

posted on 2012-01-12 23:09  sing1ee  阅读(389)  评论(0)    收藏  举报