解题记录:UVa 100,102,10055,10071

来源:互联网 发布:linux内核体系结构 编辑:程序博客网 时间:2024/06/10 04:01

据说都是简单题。但100让我调试了大概4个小时……(囧),10055也让我调试了好久。

UVa 100:


UVa 10055 - Hashmat the Brave Warrior:
(URL:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=show_problem&problem=996)
就是简单的读入和输出,但是有两个点特容易出错(我很荣幸地都出错了……):
 1. 题目说数据范围小于2^32,看起来刚好是 long 的范围吧……但容易忽视边界 2^32 那个数字:unsigned long 因为有个 “0”要表示的关系只能表示到 2^32 -1。所以要用 long long。
 2. 有句话特不显眼但是特关键:These two numbers in each line denotes the number of soldiers in Hashmat's army and his opponent's army or vice versa。重点是哪个vice versa。之前说过敌方士兵的数目大于己方的,这里说明如果输入两个数 a,b,有可能 a > b ——是先输入敌方的,后输入己方的。
附 AC代码:

 

 

 

UVa 100 - The 3n + 1 problem:
(URL:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=36)
 题目同样很简单,就是个递归的计数器问题。不过,有容易出问题的地方几点:
 1. 同上面那道题,输入 i,j 有可能出现 i>j的情况,然而计算还是要对 j~i 的范围(不然的话就没范围啦……并且题目没说不允许i>j,没说不允许就是允许)。
 2. 但是,1. 仅仅是个开始而已。更要注意的是输出地时候依照 i,j的顺序输出(如果遇到 i>j 的情况,交换了i,j之后输出,岂不是就出错啦?!)。所以很好的办法是先输出 i,j,然后再考虑i,j的大小,最后输出结果。
 3. 忘记自己是怎么在数据类型上面纠结的了,最后用的是long long

附 AC代码

 

 

UVa 102 - Ecological Bin Packing
(URL不贴啦……自己去UVa Problem Set上面找)
对自己的代码欣赏下……整齐啊,呵呵。
做这个题目的时候有几个问题我不会,不过还是绕过去了:
 1. 对于给定n个数字,输出它的全排列。 之前和室友想过这个,并且做出来了;但到了这里就忘了怎么做了;还好这个n比较小,只有“3”个。穷举就好。
 2. 用for输入多数组+判定对出循环的条件不会。最后决定用个dec表示是否应该跳出循环,并且用goto直接转到判定点(其实用goto直接跳出循环就好了……)
有需要注意的+自己处理的比较好的地方:
 (说明:下面讲的“情况”指的是三个bin的颜色排列,e.g.: BGC)
 题目要求遇到重复的最佳情况时,按照字典顺序选择第一个最佳情况。这里个人做的比较好的是,把情况对应了列举的时候的数字。由于输入时按照 B G C的顺序(即,非字母表),所以在检测输入的时候把顺序变成字母表顺序(即:每个bin的检测是 a[i][0], a[i][2], a[i][1])。之后就可以直接输出啦!
附 AC代码:

 


UVa 10071 - Back to High School Physics
很简单的题目,也没有什么迷惑人的地方。求位移的时候可以通过画图来做,已经经过的位移是之后的 1/4,所以总位移
s = 4 * 1/2( v * t ) = 2*v*s。这也说明结果必然是int。所以不用考虑用double啦…… 直接输入公式就好。

附 AC代码:

原创粉丝点击