2013微软编程之美预选赛
2013-04-06 22:18
176 查看
题目一:传话游戏
时间限制: 1000ms 内存限制: 256MB
由于传话过程中可能出现一些偏差,游戏者越多,Bob最后听到的话就与Alice所想的越不同。Bob听到的话往往会变成一些很搞笑的东西,所以大家玩得乐此不疲。经过几轮游戏后,Alice注意到在两人传话中,有些词汇往往会错误地变成其他特定的词汇。Alice已经收集到了这样的一个词汇转化的列表,她想知道她的话传到Bob时会变成什么样子,请你写个程序来帮助她。
小数据:2 ≤ N ≤ 10, 0 ≤ M ≤ 10
大数据:2 ≤ N ≤ 100, 0 ≤ M ≤ 100
样例输入
样例输出
自己写的代码如下:
第二题:长方形
时间限制: 1000ms 内存限制: 256MB
第一行,给出一个整数T,为数据组数。接下来依次给出每组测试数据。
每组数据为三个用空格隔开的整数 N,M,K。
0 ≤ K ≤ N * M
小数据:0 < N, M ≤ 30
大数据:0 < N, M ≤ 30000
样例输入
样例输出
结题:
时间限制: 1000ms 内存限制: 256MB
描述
Alice和Bob还有其他几位好朋友在一起玩传话游戏。这个游戏是这样进行的:首先,所有游戏者按顺序站成一排,Alice站第一位,Bob站最后一位。然后,Alice想一句话悄悄告诉第二位游戏者,第二位游戏者又悄悄地告诉第三位,第三位又告诉第四位……以此类推,直到倒数第二位告诉Bob。两位游戏者在传话中,不能让其他人听到,也不能使用肢体动作来解释。最后,Bob把他所听到的话告诉大家,Alice也把她原本所想的话告诉大家。由于传话过程中可能出现一些偏差,游戏者越多,Bob最后听到的话就与Alice所想的越不同。Bob听到的话往往会变成一些很搞笑的东西,所以大家玩得乐此不疲。经过几轮游戏后,Alice注意到在两人传话中,有些词汇往往会错误地变成其他特定的词汇。Alice已经收集到了这样的一个词汇转化的列表,她想知道她的话传到Bob时会变成什么样子,请你写个程序来帮助她。
输入
输入包括多组数据。第一行是整数 T,表示有多少组测试数据。每组数据第一行包括两个整数 N 和 M,分别表示游戏者的数量和单词转化列表长度。随后有 M 行,每行包含两个用空格隔开的单词 a 和 b,表示单词 a 在传话中一定会变成 b。输入数据保证没有重复的 a。最后一行包含若干个用单个空格隔开的单词,表示Alice所想的句子,句子总长不超过100个字符。所有单词都只包含小写字母,并且长度不超过20,同一个单词的不同时态被认为是不同的单词。你可以假定不在列表中的单词永远不会变化。输出
对于每组测试数据,单独输出一行“Case #c: s”。其中,c 为测试数据编号,s 为Bob所听到的句子。s 的格式与输入数据中Alice所想的句子格式相同。数据范围
1 ≤ T ≤ 100小数据:2 ≤ N ≤ 10, 0 ≤ M ≤ 10
大数据:2 ≤ N ≤ 100, 0 ≤ M ≤ 100
样例输入
2 4 3 ship sheep sinking thinking thinking sinking the ship is sinking 10 5 tidy tiny tiger liar tired tire tire bear liar bear a tidy tiger is tired
样例输出
Case #1: the sheep is thinking Case #2: a tiny bear is bear
自己写的代码如下:
import java.util.HashMap; import java.util.Map; import java.util.Scanner; import java.io.*; public class Main { public static void main(String[] args){ Scanner cin = new Scanner(System.in); int T;//测试数据组数 int N;//游戏者数量 int M;//单词转化列表长度 int num = 0; Map<String, String> map = new HashMap<String, String>(); T = cin.nextInt(); while(T-- > 0){ num ++; map.clear(); N = cin.nextInt(); M = cin.nextInt(); while(M-->0){ map.put(cin.next(), cin.next()); } cin.nextLine();//这里要注意把前面一行的末尾的换行读掉 String sLine = cin.nextLine(); String[] words = sLine.split(" "); int sentenceLength = words.length; while(--N>0){ for(int i=0; i<sentenceLength; i++){ if(map.containsKey(words[i])){ words[i] = map.get(words[i]); } } } System.out.print("Case #" + num + ":"); for(int i=0; i<sentenceLength; i++){ System.out.print(" " + words[i]); } System.out.println(); } } }
第二题:长方形
时间限制: 1000ms 内存限制: 256MB
描述
在 N 条水平线与 M 条竖直线构成的网格中,放 K 枚石子,每个石子都只能放在网格的交叉点上。问在最优的摆放方式下,最多能找到多少四边平行于坐标轴的长方形,它的四个角上都恰好放着一枚石子。输入
输入文件包含多组测试数据。第一行,给出一个整数T,为数据组数。接下来依次给出每组测试数据。
每组数据为三个用空格隔开的整数 N,M,K。
输出
对于每组测试数据,输出一行"Case #X: Y",其中X表示测试数据编号,Y表示最多能找到的符合条件的长方形数量。所有数据按读入顺序从1开始编号。数据范围
1 ≤ T ≤ 1000 ≤ K ≤ N * M
小数据:0 < N, M ≤ 30
大数据:0 < N, M ≤ 30000
样例输入
3 3 3 8 4 5 13 7 14 86
样例输出
Case #1: 5 Case #2: 18 Case #3: 1398
结题:
import java.util.Scanner; //对于一个N x M 的方格,其中长方形的数量是NM(N-1)(M-1)/4个 /* z这个题正方形优先肯定是错的。。。这个毫无疑问内。。。 在这个问题上,正方形所带来的优势并不比非常接近与正方形的长方形多多少那。。。(比如说在5*5的方格上放置10个点的情况) 只能说如果恰好够一个正方形,那么正方形的最大。。。 */ public class Main { public static void main(String[] args){ Scanner cin = new Scanner(System.in); int T; //测试数据组数 int N; //网格行数 int M; //网格列数 int K; //石子数 int result; int num = 0; T = cin.nextInt(); while(T-- > 0){ result = 0; N = cin.nextInt(); M = cin.nextInt(); K = cin.nextInt(); int temp; if(N>M){ temp = M; M = N; N = temp; } int s = (int) Math.sqrt(K); //先求能组成的正方形的边长 int width = s>N? N:s; if(width*width == K){ result = width*width*(width-1)*(width-1)/4;//当能组成正方形时,正方形中的矩形的个数是最多的 }else{ int length = M; while(width*length>K){ length--; } int maxTemp; //遍历每一种可能的矩形的情况 while(width>=2 && length<=M){ maxTemp = 0; //这里不要忘了在每一轮迭代中清0 int leftK = K-width*length; maxTemp += width*length*(width-1)*(length-1)/4; if(length<M){ //这里要判断是放在长边上还是短边上 maxTemp += length*leftK*(leftK-1)/2; }else{ maxTemp += width*leftK*(leftK-1)/2; } if(maxTemp>result){ result = maxTemp; } width--; length = K/width; } } System.out.println("Case #"+(++num)+": "+result); } } }
相关文章推荐
- word 2013在win8.1/win10下用微软自带输入法打字,光标会走位
- 微软Microsoft Visual Studio 2013 社区巡讲武汉站
- 微软邮件系统Exchange 2013系列(七)创建发送连接器
- 《微软-统一沟通-UC 2013》-1-部署-基础架构-1-install AD DS
- 微软源代码管理工具TFS2013安装与使用图文教程
- 微软要出wince 2013 (Windows Embedded Compact 2013 )了?!
- 微软2013校园招聘笔试题(9.22 第一次笔试)
- 微软2013暑期实习笔试回忆
- 微软2013暑期实习笔试题目第5题分析
- 微软TechEd2013大会门票热卖!
- 【2013微软面试题】输出节点数为n的二叉树的所有形态
- 2013微软暑期实习笔试&面试总结
- 微软正式提供Visual Studio 2013正式版下载(附直接链接汇总)
- 2013微软实习笔试题错题总结
- 信息检索盛会 微软“领衔主演”——记ACM SIGIR 2013信息检索国际会议
- 微软的2013,Surface的2014
- 微软邮件系统Exchange 2013系列(五)配置CAS负载平衡 NLB
- 微软 虚拟学院 官方 Introduction to Microsoft Dynamics CRM 2013 视频学习地址分享
- 2013微软编程之美 传话游戏&n…
- 十五、MDT 2013 Update 1批量部署-利用微软WDS部署服务实现MDT部署组播(多播)