2012谷歌挑战赛CodeJam Round 1A problem B
来源:互联网 发布:linux eth0配置 编辑:程序博客网 时间:2024/05/22 09:42
原题目:https://code.google.com/codejam/contest/1645485/dashboard#s=p1
中文意思: 瑞安在玩单人塔防游戏Kingdom Rush。
比赛规则如下:
每一个关卡有1级和2级两种,玩家赚取星星的方法如下:
如果这是玩家从未完成前的关卡,并完成1级,则该玩家获得1星星。
如果这是玩家从未完成前的关卡,并完成2级,则该玩家获得2星星。
如果这是玩家只完成1级的关卡,并完成这一次的2级,则该玩家获得1星星。
除此之外没有办法赚取星星。
每一个等级都需要一定的数量来开始,玩家从0颗星星开始。现在要求至少要多少次玩家才能完成所有的关卡2,如果没法完成则输出“Too Bad”。
输入的第一行的总测试数,接着是关卡数N。接着的N行,第一列为该关卡开始等级1所需要的星星数,第二列为开始等级2所需要的星星数.
例如:
第一个测试例子:
2
0 1
0 2
玩家开始星星数是0,可以选择关卡1,和2.选择1的等级1,完成,获得1星星,完成等级2,获得1星星,共2星星,可以满足关卡2的等级2的数目,去完成。共3次。输出
Case #1: 3
Sample
java源码:
import java.io.FileReader;import java.io.FileWriter;import java.io.PrintWriter;import java.util.Scanner;/** * * @author hortondland@gmail.com * @date 2013.04.18 * */public class KingdomRush {final static String PROBLEM_NAME = KingdomRush.class.getName();static int[][] stars; static boolean[][] finished; static int currentStars = 0, beatCount = 0;public static void solve(Scanner sc, PrintWriter pw) {currentStars = 0;beatCount = 0 ;int N = sc.nextInt();finished = new boolean[N][2]; stars = new int[N][2];for (int i = 0; i < stars.length; i++) {stars[i][0] = sc.nextInt();stars[i][1] = sc.nextInt();}for (int i = 0; i < finished.length; i++) {finished[i][0] = false;finished[i][1] = false;}while(!allLeve2finished()){beatNextLevel();if( beatCount > N*2+1){pw.println("Too Bad");System.out.println("Too Bad"); return;}}pw.println(beatCount);System.out.println(beatCount);return;} /**用贪心算法按照当前星星数,选择下一个满足的关卡 * */private static void beatNextLevel() {beatCount++;//因为从等级2开始获得的星星数最多。for (int i = 0; i < stars.length; i++) {if(finished[i][1]==false){if( currentStars >= stars[i][1] ){finished[i][1] = true;currentStars += getStars(i,2);return;}else{continue;}}}if(allLeve2finished()){return;}int[][] start2 = new int[stars.length][2];for (int j = 0; j < start2.length; j++) {start2[j][0] = -1;start2[j][1] = -1;}for (int i = 0; i < stars.length; i++) {if(finished[i][0]==false){if( currentStars >= stars[i][0] ){start2[i] = stars[i].clone();}else{continue;}}}//当等级1的需要星星数相同时,选择该关卡的等级2最大的那个完成,//因为有种情况是,有些关卡如果完成了等级1,再完成等级2,次数会浪费一个,结果就可能不是最优解。int maxinCurL2 = -1 ,maxCol = -1;for (int i = 0; i < start2.length; i++) {if (start2[i][1] > maxinCurL2){maxinCurL2 = start2[i][1];maxCol = i;}}if(maxCol!=-1){finished[maxCol][0] = true;currentStars += getStars(maxCol,1);}return;}/** * * @param curN 当前关卡 * @param Level 等级1或等级2 * @return 星星数 */private static int getStars(int curN, int Level) {if(Level==1){if(finished[curN][1] == false){return 1;}else{return 0;}}if(Level==2){if(finished[curN][0] == false){return 2;}else{return 1;}}return Integer.MAX_VALUE;}private static boolean allLeve2finished() {for (int i = 0; i < finished.length; i++) {if(finished[i][1] == false){return false;}}return true;}public static void main(String[] args) throws Exception {System.out.println("Start...");Scanner sc = new Scanner(new FileReader(PROBLEM_NAME));PrintWriter pw = new PrintWriter(new FileWriter(PROBLEM_NAME+ "output.txt"));int caseCnt = sc.nextInt();for (int caseNum = 0; caseNum < caseCnt; caseNum++) { System.out.println("Processing test case " + (caseNum + 1));if((caseNum + 1)==3){System.out.println();}pw.print("Case #" + (caseNum + 1) + ": "); solve(sc, pw);}pw.flush();pw.close();sc.close();System.out.println("done");}}
- 2012谷歌挑战赛CodeJam Round 1A problem B
- [2013 Codejam Round 1B Problem B] 呵呵。。。
- codejam 2015 Round 1A
- Google CodeJam Round 1A 2013
- Codejam Qualification Round 2016 - A,B,C题解
- codejam:Problem A. Teaching Assistant
- [Google Codejam] Round 1A 2016 - The Last Word
- [Google Codejam] Round 1A 2016 - Rank and File
- Codejam 2008 qualification round question B
- [GCJ] 2011 Round 1B Problem A RPI
- Code Jam 2010 Round 1A Problem B
- Code Jam 2010 Round 1B Problem A
- Google Code Jam Round 1A 2015 Problem B. Haircut
- Google Code Jam 2015 Round 1A: Problem B. Haircut
- Codejam 2008 qualification round question A
- codejam 2016 Round A APAC Test
- 1:A+B Problem
- 1:A+B Problem
- CPU Cache原理 &避免dma cache 出错
- 记录给笔记本装Fedora 16 的大致过程! =============
- vista或windows7远程桌面控制服务器较慢 反应迟钝
- Android SQLite操作
- oracle index
- 2012谷歌挑战赛CodeJam Round 1A problem B
- vmlinuxz initrd system.map
- Mac OSx 如何使用串口终端?超级终端?minicom?serial port?
- 聊天室程序加nc
- 如何将文件内容读入CString 变量
- 如何通过代码终止工作流实例
- ICTCLAS2011_JNI学习笔记-ICTCLAS_SetPOSmap及ICTCLAS_ParagraphProcess接口
- 如何在win系统下安装树莓派的系统到SD卡(菜鸟教程一)
- ICTCLAS2011_JNI学习笔记-ICTCLAS_ImportUserDictFile及ICTCLAS_SaveTheUsrDic接口