第一题:我是机器人
一个方格,Y轴向下,X轴向右,机器人在左上角,位置(0,0)。
输入命令4种:
L:左转90度
R:右转90度
G X:当前朝向走X步(碰壁停止)
P:输出位置坐标
Python实现AC代码:
if __name__ == '__main__':
nums = int(input().strip())
for i in range(nums):
print("Case #" + str(i+1) + ":")
n, m = map(int, input().strip().split())
index = [0, 0]
log = [[0, -1], [1, 0], [0, 1], [-1, 0]]
now = 0
for i in range(m):
order = input().strip().split()
if order[0] == 'P':
print(' '.join(map(str, index)))
elif order[0] == 'G':
direc = log[now]
if direc[0] != 0:
step = index[0] + direc[0]*int(order[1])
if step >= n-1:
index[0] = n-1
elif step <= 0:
index[0] = 0
else:
index[0] = step
else:
step = index[1] + direc[1] * int(order[1])
if step >= n-1:
index[1] = n-1
elif step <= 0:
index[1] = 0
else:
index[1] = step
elif order[0] == 'L':
now = (now-1)%4
elif order[0] == 'R':
now = (now+1)%4
第二题:多彩珠子最长子串长度
有一串多彩的珠子(其中最多有9种颜色)。称其中最长的连续颜色相同的珠子为主串。
为了获得一个尽量长的主串,可以最多修改一个珠子的颜色,求主串最长为多长。
输入描述:第一行输入M,表示测试用例数目,接下来1~ m+1行,为1~9组成的数字字符。
输出: 每一行为对应的最长子串长度。
输入:
2
123112111
111
输出:
6
3
Python实现AC:
思路大概是:先考虑原始连续的最长,然后考虑改变一个可以得到的最长,最后是改变某一端可以得到的最长,最终三个取最大。
if __name__ == '__main__':
nums = int(input().strip())
for i in range(nums):
color = list(input().strip())
from collections import OrderedDict
d = OrderedDict()
later = color[0]
i = 1
cnt = 0
maxlen = 0
for item in color:
if item == later:
cnt += 1
else:
d[i] = [later, cnt]
maxlen = max(cnt, maxlen)
later = item
cnt = 1
i += 1
d[i] = [later, cnt]
maxlen = max(cnt, maxlen)
# print(d)
length = 0
for i in range(1, len(d.values()) - 1):
if d[i][0] == d[i + 2][0] and d[i + 1][1] == 1:
now = d[i][1] + 1 + d[i + 2][1]
length = max(now, length)
# print(length)
new = 0
if len(d.values())>1:
for item in d.values():
new = max(new, item[1]+1)
print(max(maxlen, length, new))