您的位置:首页 > 运维架构

【Topcoder】SRM158 DIV2总结

2014-08-26 11:14 295 查看
250分题:给定一个4位字符串initial和rotate这个字符串的方式,然后再给另一个字符串current,问current能否由initial通过rotate得到,需要几次rotate?

简单的模拟题,把rotate模拟好就行。

代码:TireRotation

500分题:给定一个等式,求出这个等式是否在x进制下成立(x在2~20之间)。

我的思路是自己写一个BaseAdd模拟进制x下的加法,然后根据等式中两个加数算出在x进制下相加的和,然后和等式中的和比较是否相等。

BaseAdd的实现类似大整数加法,把整数变成字符串然后模拟加法和进位。

代码:BaseMystery

这题看完大神的代码我简直要吐血身亡了,原来java中的Integer.parseInt有一个参数可以指定把字符串转换为x进制的数,然后两个x进制的数是可以直接用+相加的,所以自己没必要实现BaseAdd,灰常简单。下面是Integer.parseInt的部分javadoc:

* Parses the string argument as a signed integer in the radix
* specified by the second argument. The characters in the string
* must all be digits of the specified radix (as determined by
* whether {@link java.lang.Character#digit(char, int)} returns a
* nonnegative value), except that the first character may be an
* ASCII minus sign {@code '-'} ({@code '\u005Cu002D'}) to
* indicate a negative value or an ASCII plus sign {@code '+'}
* ({@code '\u005Cu002B'}) to indicate a positive value. The
* resulting integer value is returned.


以下是几个自带的例子:

* parseInt("0", 10) returns 0
* parseInt("473", 10) returns 473
* parseInt("+42", 10) returns 42
* parseInt("-0", 10) returns 0
* parseInt("-FF", 16) returns -255
* parseInt("1100110", 2) returns 102
* parseInt("2147483647", 10) returns 2147483647
* parseInt("-2147483648", 10) returns -2147483648
* parseInt("2147483648", 10) throws a NumberFormatException
* parseInt("99", 8) throws a NumberFormatException
* parseInt("Kona", 10) throws a NumberFormatException
* parseInt("Kona", 27) returns 411787


1000分题:这题就是“宝石迷阵”的超级简化版,给定一个board,问有多少种可能的move,一次move是把一个元素和它周围8个元素中一个互相交换位置(如果这8个元素存在),要求交换后能产生连续3个一行或者一列字符相同时才能交换。

模拟就可以了,自己实现3个函数:交换函数,判断当前交换是否生效函数和某个位置是否合法的函数;然后把board中每个元素和它上面及右边的元素分别交换,看是否能得到一次合法交换(只交换上面和右边是为了避免重复交换)。

代码“:Gems
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: