争做python小能手(一)
通过在 Codeforces 上用 Python 过题来增加对 python 的理解。
------------------------------------
CodeForces 208A
--
s = raw_input() a = s.split('WUB') for t in a: if t!='': print t,
--
1、 raw_input()读取一行输入作为字符串,一般配合split()作为读取数据
2、 str.split(str="", num=string.count(str)) 该方法返回字符串中的所有单词的列表,使用str作为分隔符(默认为空格),拆分的数目为num。
3、 print 后面用逗号隔开表示输出后不换行,用空格链接下一个输出,实际上这种情况用join更方便
4、 str.join(sequence) 用str分割sequence中的每一个元素
--
print raw_input().replace('WUB', ' ')
--
5、 str.replace(old, new[, max]) 该方法返回将old替换为new后的字符串,替换数量默认为最大。-------------
CodeForces 208D
--
n = input() p = map(int,raw_input().split()) a = map(int,raw_input().split()) money = 0 ans = [0] * 5 for x in p: money += x for i in xrange(4,-1,-1): ans[i] += money // a[i] money %= a[i] print ' '.join(map(str,ans)) print money---
6、 input()读入一个元素,如果要读入字符串的话,字符串要加上引号,通常用来读入数字
7、 map(function, iterable, ...) 来自于函数式编程的思想,对可迭代函数'iterable'中的每一个元素应用‘function’方法,将结果作为list返回。
8、 python中初始化一个一维数组要用 [0] * n,初始化多维数组则要用[[0]*(m) for _ in xrange(n)]
-----------------
CodeForces 208B
--
n = input() top = raw_input().split() stack = [top] st = set([tuple(top)]) found = False while (len(stack)): top = stack.pop() if len(top)==1: found = True break; for i in [-2,-4]: if len(top)>=-i and (top[-1][0]==top[i][0] or top[-1][1]==top[i][1]): tmp = list(top) last = tmp.pop() tmp[i+1] = last if tuple(tmp) not in st: st.add(tuple(tmp)) stack.append(tmp) if found: print "YES" else: print "NO"
--
9、set是一个无序不重复元素集。set([e1,e2,e3]) 将列表里的元素初始化为一个集合
10、 tuple()将list转换成tuple,list()将tuple转换成list...
11、 len() 求元素数量
12、 听说python递归效率低,用栈更快?大概吧...