刚出锅的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)