-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathGottaCatchEmAll.py
80 lines (63 loc) · 1.97 KB
/
GottaCatchEmAll.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import sys
import math
# a simple parser for python. use get_number() and get_word() to read
def parser():
while 1:
data = list(input().split(' '))
for number in data:
if len(number) > 0:
yield(number)
input_parser = parser()
def get_word():
global input_parser
return next(input_parser)
def get_number():
data = get_word()
try:
return int(data)
except ValueError:
return float(data)
# numpy and scipy are available for use
class Hole:
def __init__(self, dist):
self.dCount = 0
self.dist = dist
def getDigMin(hole):
if hole.dcount == 2:
return math.inf
else:
return hole.dist
numCases = get_number()
for _ in range(0, numCases):
info = sys.stdin.readline().strip(' ').strip('\n').strip('\r').split(' ')
numHoles = int(info[0])
numDigletts = int(info[1])
numToSave = int(info[2])
cost = int(info[3])
diglettDists = []
for diglett in range(0, numDigletts):
diglettInfo = sys.stdin.readline().strip(' ').strip('\n').strip('\r').split(' ')
diglettInfo = list(map(int, diglettInfo))
diglettDists.append(diglettInfo)
diglettDists = sorted(diglettDists, key=min)
#for i, diglett in enumerate(diglettDists):
# for j, dist in enumerate(diglett):
# diglettDists[i][j] = Hole(dist)
holeRef = [0] * numHoles
numSaved = 0
maxTime = 0
while numSaved != numToSave:
diglett = diglettDists.pop(0)
minDist = min(diglett)
if minDist > maxTime:
maxTime = minDist
holeNum = diglett.index(minDist)
for diglett in diglettDists:
if holeRef[holeNum] == 0:
diglett[holeNum] += cost
elif holeRef[holeNum] == 1:
diglett[holeNum] = 99999999
#print (diglettDists)
numSaved += 1
diglettDists = sorted(diglettDists, key=min)
print(maxTime)