A.
题意:给出一个字符串,中间用|分割开,再给一个字符串,字符串中的数字要选一下放到左边,剩下的全放右边,使得最后两边字符串等长。
分析:直接模拟。
/***************************************** File Name: 224a.cpp* Author: sky0917* Created Time: 2014年01月17日 23:28:18****************************************/#include
View Code
B.
题意:给出5个数字 a, b, w, x, c (1 ≤ a ≤ 2·109, 1 ≤ w ≤ 1000, 0 ≤ b < w, 0 < x < w, 1 ≤ c ≤ 2·109).
a,b,w,x是第一个人的,c是第二个人的,每次第二个人都将 c - 1 ,第一个人如果 b ≥ x 就执行 b = b - x 否则就执行a = a - 1; b = w - (x - b)
问经过最少多少次之后会出现c <= a
分析:a 和 c 很大,而b 和 w 都比较小,发现经有限次之后b 会变成原来的值,所以考虑找循环节,
找到一个循环节中经过的次数 ti 和 a 不变的次数 d,那么每经过 ti 次,c就会比a多减 d,
算出 de = c - a,这个de表示 c 一共要比a多减的次数,先算出经过若干个循环节的次数,de对a
的余数部分单独计算。
/***************************************** File Name: 224b.cpp* Author: sky0917* Created Time: 2014年01月18日 1:03:09****************************************/#include
View Code
C.
题意:给出n 个数字,把这些数字排成有序的一列,然后可以在任何一个位置放上一个数字x,要求使得n+1个数字构成等差数列,问 x 可以是哪些值。
分析:模拟,考虑好特殊的情况。
当 n = 1 时, 有无数个 x 满足
当所有数字都一样时
如果 n = 1, 有无数个 x 满足
否则 只有一个 x 满足
当数字不都一样时
当 n = 2 时,
至少有2个满足,一个在最前,一个在最后,如果 中间可以放一个数字的话 就是 有 3个满足
当 n > 2 时,
如果序列中相邻数字的差值超过 2 种, 则有 0 个 x 满足
如果序列中相邻的数字的差值是 2 种,分别是 d1, d2
如果 d1 > 1 && d2 > 1 ,那么有 0 种 x 满足
如果 d1 = 1 && d2 > 1, 那么d1 的次数只能出现 1 次,而且 d1是偶数,而且 d1 = d2*2 ,那么就有 3 种 x 满足,否则有 0 种
如果 d1 > 1 && d2 = 1,同上
如果 d1 = 1 && d2 = 1,同上
如果序列中相邻的数字的差值是 1 种, 那么有 2 种 x 满足,分别是开头和结尾。
/***************************************** File Name: 224c.cpp* Author: sky0917* Created Time: 2014年01月18日 0:05:12****************************************/#include
View Code
D.
题意:给出类似下面的这种棋盘 grid:
####
#>^#
####
^ v < > 分别表示在那个位置可以走的方向,# 可以放两个棋子,棋子进入该位置后就不能再动,
现在有 2 个 棋子,# 位置可以放 2个棋子,其它位置只能放一个,一开始选定 2 个位置放上这 2 个棋子,然后每次
同时让棋子沿着格子的方向移动,一直到进入# 为止。问两个棋子移动的总次数最多是多少。
分析:如果有环路则总次数无限大,否则如果以最终到达的 # 为根,路径为边,会发现两个棋子的路径是一棵树,问题
就转化为在一棵树(或一个森林)找两个最长的路径,满足他们在距离叶子相同距离的位置不能有相交,(两条
路径可以部分重合)
/***************************************** File Name: 224d.cpp* Author: sky0917* Created Time: 2014年01月18日 11:22:46****************************************/#include
View Code