刚出锅的HULU 笔试题...
AC前两道水题,第三道本来想拿部分分,结果死活过不去,TLE... 大家交流下啊~
ps:附代码
第一题:
slist = raw_input().strip().split()
slist.sort(key=lambda x:len(x))
n = len(slist)
def find(n,slist):
for i in range(n-2, -1, -1):
for j in range(i-1, -1, -1):
if slist[i]+slist[j] in slist[i+1:]:
return slist[i]+slist[j]
if slist[j]+slist[i] in slist[i+1:]:
return slist[j]+slist[i]
print find(n, slist)
第二题:
import itertools
n = int(raw_input().strip())
parts = []
def generate_negs(multi_vals):
n = len(multi_vals)
num = 2**n
ans = []
for i in range(num):
res = []
m = i
for j in range(n):
if m&1:
res.append('-'+multi_vals[j])
else:
res.append(multi_vals[j])
m >>= 1
res.sort()
ans.append(','.join(res))
return ans
def generate_single_request(name, is_necessary, is_multi, is_neg, vals):
res = []
if not is_necessary:
res.append("")
if is_multi:
if is_neg:
for i in range(1, len(vals)+1):
#all_multi_vals = list(itertools.combinations(vals, i))
for multi_vals in itertools.combinations(vals, i):
res += [name+'='+r for r in generate_negs(multi_vals)]
else:
for i in range(1, len(vals)+1):
multi_vals = itertools.combinations(vals, i)
res += [name + '=' +','.join(r) for r in multi_vals]
else:
if is_neg:
for v in vals:
res.append(name+"=-"+v)
res += [name + '=' +r for r in vals]
else:
res += [name + '=' + r for r in vals]
return res
for _ in range(n):
name, is_necessary, is_multi, is_neg = raw_input().strip().split()
is_necessary = int(is_necessary)
is_multi = int(is_multi)
is_neg = int(is_neg)
vals = raw_input().strip().split(',')
vals.sort()
this_part = generate_single_request(name, is_necessary, is_multi, is_neg, vals)
parts.append(this_part)
res = []
def generate_requests(parts, i, current):
if i==len(parts):
res.append(current[:])
return
else:
for p in parts[i]:
generate_requests(parts, i+1, current+[p])
generate_requests(parts, 0, [])
final = []
for r in res:
final.append('&'.join(sorted([t for t in r if t!=''])))
final.sort()
for r in final:
print r
第三题:
def valid(x, y, row_num, col_num):
if 0<=x<row_num and 0<=y<col_num:
return True
else:
return False
def bfs(map_hl, x, y, row_num, col_num, visited, hop_left, l):
if visited[x][y]:
return -1
visited[x][y] = True
ans = 0
if valid(x, y-1, row_num, col_num) and map_hl[x][y-1]=="#":
ans = max(ans, bfs(map_hl, x, y-1, row_num, col_num, visited, hop_left,l))
if valid(x, y + 1, row_num, col_num) and map_hl[x][y + 1] == "#":
ans = max(ans, bfs(map_hl, x, y + 1, row_num, col_num, visited, hop_left,l))
for i in range(1, l+1):
if valid(x+i, y, row_num,col_num) and map_hl[x+i][y] == "#":
ans = max(ans, bfs(map_hl, x+i, y, row_num, col_num, visited, hop_left, l))
if valid(x-i, y, row_num,col_num) and map_hl[x-i][y] == "#":
ans = max(ans, bfs(map_hl, x-i, y, row_num, col_num, visited, hop_left, l))
if hop_left>0 and valid(x, y - 1, row_num, col_num) and map_hl[x][y - 1] == "-" and valid(x, y - 2, row_num, col_num) and map_hl[x][y - 2] == "#":
ans = max(ans, bfs(map_hl, x, y - 2, row_num, col_num, visited, hop_left-1, l))
if hop_left>0 and valid(x, y + 1, row_num, col_num) and map_hl[x][y + 1] == "-" and valid(x, y + 2, row_num, col_num) and map_hl[x][y + 2] == "#":
ans = max(ans, bfs(map_hl, x, y + 2, row_num, col_num, visited, hop_left-1, l))
visited[x][y] = False
return ans+1
N = int(raw_input())
for tid in range(1, N+1):
n, m, l, s = map(int, raw_input().strip().split())
map_hulu = []
for _ in range(m):
row = raw_input().strip()
map_hulu.append(row)
#print map_hulu
visited = [[False]*n for _ in range(m)]
ans = bfs(map_hulu, m-1, 0, m, n, visited, s,l)
print "Test Case "+str(tid)+": "+str(ans)
