杭电Acm-1046解题心得
2012-01-12 23:09
253 查看
这道题目,我刚看的时候,就觉得是DFS,结果用DFS解决的时候,总是TLE。后来百度了一下,才发现,被出题者给忽悠了。这道题目其实并不是DFS,而且寻找简单的规律。规律非常简单,我在思考的过程中,也有想过,只是不敢相信,会如此简单。规律如下:
对于m和n至少有一个是偶数的情况,结果就为m*n
对于m和n都为奇数的情况,结果为:m*n + 0.41(0.41 = sqrt(1 + 1) - 1)
这样,代码实现,才是最最简单的:
这个题目,并不难,但要求我们能够善于发现规律。不能一味的陷入一下常规的解决问题的思路中。
对于m和n至少有一个是偶数的情况,结果就为m*n
对于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(); } }
这个题目,并不难,但要求我们能够善于发现规律。不能一味的陷入一下常规的解决问题的思路中。
相关文章推荐
- 杭电Acm-1238解题心得
- 杭电Acm-1045解题心得
- 杭电Acm-1010,1016,1240解题心得
- 杭电Acm-1239解题心得
- 杭电OJ2029解题心得
- 杭电acm1019 hdu-acm-101解题报告
- 杭电acm1014 hdu-acm-1014解题报告
- 杭电acm1017 hdu-acm-1017解题报告
- YT03-递推求解课堂题目-1003 献给杭电五十周年校庆的礼物-(6.7日-烟台大学ACM预备队解题报告)
- 杭电acm1008 hdu-acm-1008解题报告
- 杭电Acm-母函数题目解题报告
- 杭电acm1019 hdu-acm-101解题报告
- 杭电acm1282 hdu-acm-1282回文数猜想解题报告
- 杭电ACM 2000->2099 100道题 详细解题报告出炉
- acm解题心得第一篇:puk 1001题
- 杭电ACM 1274---展开字符串 解题报告
- 杭电acm1012 hdu-acm-1012解题报告
- 杭电acm1232 hdu-acm-1232畅通工程解题报告
- 杭电ACM题 1036 Edge解题报告
- 杭电acm阶段之理工大版--第一阶段开始入门解题代码(1)