做菜
题干
大牛喜欢做菜,每种菜需要不同的材料,求需要准备多少种材料。
每一行是一个菜谱,<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