做菜
題幹
大牛喜歡做菜,每種菜需要不同的材料,求需要準備多少種材料。
每一行是一個菜單,<50位元組,輸入行數不确定,不超過50行。
難點:如何擷取輸入結束的标志
輸入示例
apple banana
potato apple egg
輸出示例
4
import sys
food = {}
for i in sys.stdin.readlines():
for f in i.split(' '):
food[f] = 1
print len(food)
迷宮
大牛要按特定的移動方式在迷宮中跳躍移動,在最糟糕的情況下,将迷宮出口設定在某個位置時,大牛走出迷宮所需的最少步數值最大,求這個最大值。如果将除垢設定在某處大牛永遠也走不出去的話,輸出-1.
輸入n和m,0
接下來輸入n行,每行有m個字元,'.'表示可走的地方,非'.'表示不可走的地方
接下來輸入大牛的起始位置,x,y, 0<=x
接下來輸入合法移動方式數量k
接下來的k行輸入合法移動方式, dx, dy, -50<=dx, dy <=50
題幹
輸入示例
3 3
...
...
...
1 0
4
0 1
1 0
-1 0
0 -1
輸出示例
2
轉載請注明原始連結
mn = raw_input().split(' ')
n = int(mn[0])
m = int(mn[1])
tmap = {}
for i in range(n):
tmap[i] = {}
s = raw_input()
for j in range(m):
if s[j] == '.':
tmap[i][j] = '.'
else:
tmap[i][j] = 'x'
starts = raw_input().split(' ')
start = (int(starts[0]), int(starts[1]))
k = int(raw_input())
steps = []
for i in range(k):
s = raw_input().split(' ')
steps.append((int(s[0]), int(s[1])))
def move(start, step):
return (start[0] + step[0], start[1] + step[1])
def check(loc):
global m, n, tmap
x, y = loc
if x < 0 or x >= n:
return False
if y < 0 or y >= m:
return False
if tmap[x][y] != '.':
return False
return True
lst = []
lst.append(start)
tmap[start[0]][start[1]] = 0
while(len(lst) != 0):
loc = lst[0]
c = tmap[loc[0]][loc[1]]
del lst[0]
for step in steps:
if check(move(loc, step)):
newloc = move(loc, step)
lst.append(newloc)
tmap[newloc[0]][newloc[1]] = c + 1
def final():
global tmap, n, m
max = 0
for i in range(n):
for j in range(m):
if tmap[i][j] == '.':
return -1
elif tmap[i][j] != 'x':
if tmap[i][j] > max:
max = tmap[i][j]
return max
def output():
global tmap, n, m
for i in range(n):
for j in range(m):
print tmap[i][j],
print ''
print final()
數列
題幹
一個數列l中, i < j且l[i] < l[j]的數量稱為這個數列的"對數"。
大牛草稿紙上有一個數列,它的長度為n,由1、2、3……n不重複的數字排列而成,大牛知道它的對數為k。由于草稿紙上有污漬,這個數列的一部分不見了。試求原來數列可能的情況有多少種。
輸入n, k
下一行輸入數列,0表示看不見的數字(<=10個)
輸入示例
5 5
4 0 0 2 0
輸出示例
3
s = raw_input().split(' ')
n = int(s[0])
k = int(s[1])
l = raw_input().split(" ")
ls = []
for i in l:
ls.append(int(i))
import itertools
count = 0
zeros = []
nums = {}
unums = []
for i in range(1, n+1):
nums[i] = 0
for i in range(n):
nums[ls[i]] = 1
if ls[i] == 0:
zeros.append(i)
for i in nums:
if nums[i] == 0 and i != 0:
unums.append(i)
for x in itertools.permutations(unums, len(unums)):
lls = ls[:]
adc = 0
for i in range(len(zeros)):
lls[zeros[i]] = x[i]
for i in range(n):
for j in range(i + 1, n):
if lls[i] < lls[j]:
adc += 1
if adc == k:
count += 1
print count