第一题 20A
题意:给定一个字符串路径,但是这个路径可能由多个/来分割,现在要求我们把这个路径简化为Linux下的路径格式,要求末尾不能有/,根目录是一个/
思路:我们利用split()函数把字符串利用/来分割,然后我们利用join()函数来连接非空的值,但是要注意开头一定要有一个/(根目录)
代码:
# solve
def solve():
str = raw_input()
print "/"+"/".join(s for s in str.split("/") if s)
if __name__ == "__main__":
solve()
第二题 19A
Everyone knows that 2010 FIFA World Cup is being held in South Africa now. By the decision of BFA (Berland's Football Association) next World Cup will be held in Berland. BFA took the decision to change some World Cup regulations:
- the final tournament featuresnteams (nis always even)
- the firstn / 2teams (according to the standings) come through to the knockout stage
- the standings are made on the following principle: for a victory a team gets 3 points, for a draw — 1 point, for a defeat — 0 points. In the first place, teams are ordered in the standings in decreasing order of their points; in the second place — in decreasing order of the difference between scored and missed goals; in the third place — in the decreasing order of scored goals
- it's written in Berland's Constitution that the previous regulation helps to order the teams without ambiguity.
You are asked to write a program that, by the given list of the competing teams and the results of all the matches, will find the list of teams that managed to get through to the knockout stage.
The first input line contains the only integern(1 ≤ n ≤ 50) — amount of the teams, taking part in the final tournament of World Cup. The followingnlines contain the names of these teams, a name is a string of lower-case and upper-case Latin letters, its length doesn't exceed 30 characters. The followingn·(n - 1) / 2lines describe the held matches in the formatname1-name2 num1:num2, wherename1,name2— names of the teams;num1,num2(0 ≤ num1, num2 ≤ 100) — amount of the goals, scored by the corresponding teams. Accuracy of the descriptions is guaranteed: there are no two team names coinciding accurate to the letters' case; there is no match, where a team plays with itself; each match is met in the descriptions only once.
Outputn / 2lines — names of the teams, which managed to get through to the knockout stage in lexicographical order. Output each name in a separate line. No odd characters (including spaces) are allowed. It's guaranteed that the described regulations help to order the teams without ambiguity.
4 A B C D A-B 1:1 A-C 2:2 A-D 1:0 B-C 1:0 B-D 0:3 C-D 0:3
A D
2 a A a-A 2:1
a
题意:足球世界杯有n支足球队,现在第一轮两两之间较量,赢球的人得3分,平局得1分,输的0分。现在的排名按照得分高低,如果得分一样按照总进球分数和总输球分数的差,如果在一样按照总进球分数高底。要求进入第二轮的n/2支球队,按照字典序输出
思路:利用Python的字典,字典的value是一个列表保存球队得分,总输球分,总进球分
代码:
#coding=utf-8
import os
import sys
# solve
def solve():
n = int(raw_input())
dic = {}
for i in range(n):
str = raw_input()
dic[str] = [0,0,0]
i = n*(n-1)/2
while i:
list = raw_input().split()
tmp1 = list[0].split("-")
tmp2 = list[1].split(":")
i -= 1
if(int(tmp2[0]) > int(tmp2[1])):
dic[tmp1[0]][0] += 3
dic[tmp1[0]][1] += int(tmp2[1])
dic[tmp1[0]][2] += int(tmp2[0])
dic[tmp1[1]][1] += int(tmp2[0])
dic[tmp1[1]][2] += int(tmp2[1])
elif(int(tmp2[0]) == int(tmp2[1])):
dic[tmp1[0]][0] += 1
dic[tmp1[0]][1] += int(tmp2[1])
dic[tmp1[0]][2] += int(tmp2[0])
dic[tmp1[1]][0] += 1
dic[tmp1[1]][1] += int(tmp2[0])
dic[tmp1[1]][2] += int(tmp2[1])
else:
dic[tmp1[0]][1] += int(tmp2[1])
dic[tmp1[0]][2] += int(tmp2[0])
dic[tmp1[1]][0] += 3
dic[tmp1[1]][1] += int(tmp2[0])
dic[tmp1[1]][2] += int(tmp2[1])
# out
ans = sorted(dic.items() , key = lambda value:(value[1][0],value[1][2]-value[1][1],value[1][2]) , reverse = True)
out = []
for i in range(n/2):
out.append(ans[i][0])
out.sort()
for s in out:
print s
# main
if __name__ == "__main__":
solve()
第三题 21A
题目:测试给定的字符串是否满足给定的格式
思路:不解释,题目数据很变态
代码:
#coding=utf-8
import os
import sys
def isOk(ch):
if (ch.isalpha() or ch.isdigit() or ch == '_'):
return True
return False
# solve
def solve():
str = raw_input()
# judge username
pos = str.find('@')
if pos <= 0 or str.count('@') != 1:
return "NO"
for i in range(pos):
if not isOk(str[i]):
return "NO"
# judge hostname
str = str[pos+1:]
if len(str) == 0:
return "NO"
while True:
pos = str.find('.')
if pos == -1:
if str.find('/') != -1:
break
for i in str:
if not isOk(i):
return "NO"
break
if pos == 0 or pos == len(str)-1:
return "NO"
for i in range(pos):
if not isOk(str[i]):
return "NO"
str = str[pos+1:]
# judge resource
pos = str.find('/')
if pos != -1:
if pos == 0:
return "NO"
str = str[pos+1:]
if len(str) == 0:
return "NO"
for i in str:
if not isOk(i):
return "NO"
return "YES"
# main
if __name__ == "__main__":
print solve()