Stuff not committed
This commit is contained in:
parent
dd8f44e727
commit
73d8f85b6f
4 changed files with 140 additions and 0 deletions
37
gnomes.py
Normal file
37
gnomes.py
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import heapq
|
||||||
|
|
||||||
|
def gnome_seq(A, H, n):
|
||||||
|
R = []
|
||||||
|
i = 0
|
||||||
|
while i < len(A):
|
||||||
|
if not len(H) == 0 and H[0] < A[i]:
|
||||||
|
R.append(heapq.heappop(H))
|
||||||
|
else:
|
||||||
|
R.append(A[i])
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
while len(H) > 0:
|
||||||
|
R.append(heapq.heappop(H))
|
||||||
|
return R
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
string = input().split()
|
||||||
|
n = int(string[0])
|
||||||
|
m = int(string[1])
|
||||||
|
A = []
|
||||||
|
E = [False] * (n+1)
|
||||||
|
for i in range(m):
|
||||||
|
num = int(input())
|
||||||
|
A.append(num)
|
||||||
|
E[num] = True
|
||||||
|
H = []
|
||||||
|
for i in range(1, n + 1):
|
||||||
|
if not E[i]:
|
||||||
|
heapq.heappush(H, i)
|
||||||
|
|
||||||
|
for n in gnome_seq(A, H, n):
|
||||||
|
print(n)
|
||||||
|
|
3
gnomes.txt
Normal file
3
gnomes.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
1 1
|
||||||
|
1
|
||||||
|
|
91
promo.py
Normal file
91
promo.py
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import queue
|
||||||
|
|
||||||
|
def criteria(a):
|
||||||
|
return a[0]
|
||||||
|
|
||||||
|
def promote(G, Ginv, a, b):
|
||||||
|
Depth = [None] * len(G)
|
||||||
|
|
||||||
|
Q = queue.Queue(maxsize=len(G))
|
||||||
|
|
||||||
|
print(Ginv)
|
||||||
|
|
||||||
|
for i in range(len(G)):
|
||||||
|
if len(Ginv[i]) == 0:
|
||||||
|
Q.put(i)
|
||||||
|
Depth[i] = 0
|
||||||
|
|
||||||
|
print(G)
|
||||||
|
|
||||||
|
while not Q.empty():
|
||||||
|
u = Q.get()
|
||||||
|
for v in G[u]:
|
||||||
|
if Depth[v] is None:
|
||||||
|
Depth[v] = Depth[u] + 1
|
||||||
|
Q.put(v)
|
||||||
|
|
||||||
|
for i in range(len(Depth)):
|
||||||
|
Depth[i] = (Depth[i], i)
|
||||||
|
|
||||||
|
print(Depth)
|
||||||
|
|
||||||
|
Depth.sort(key=criteria, reverse=True)
|
||||||
|
|
||||||
|
sums = [0]
|
||||||
|
p = None
|
||||||
|
for i in range(0, len(Depth)):
|
||||||
|
if p is None or p == Depth[i][0]:
|
||||||
|
sums[-1] += 1
|
||||||
|
p = Depth[i][0]
|
||||||
|
else:
|
||||||
|
sums.append(0)
|
||||||
|
p = None
|
||||||
|
|
||||||
|
ss = 0
|
||||||
|
i = 0
|
||||||
|
while i < len(sums) and ss + sums[i] <= a:
|
||||||
|
ss = ss + sums[i]
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
prom_A = ss
|
||||||
|
|
||||||
|
while i < len(sums) and ss + sums[i] <= b:
|
||||||
|
ss = ss + sums[i]
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
prom_B = ss
|
||||||
|
|
||||||
|
if ss < b:
|
||||||
|
ss = ss + sums[i]
|
||||||
|
|
||||||
|
no_prom = ss
|
||||||
|
|
||||||
|
return (prom_A, prom_B, no_prom)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
s = input().split()
|
||||||
|
a = int(s[0])
|
||||||
|
b = int(s[1])
|
||||||
|
n_emp = int(s[2])
|
||||||
|
n_prec = int(s[3])
|
||||||
|
|
||||||
|
G = []
|
||||||
|
Ginv = []
|
||||||
|
for i in range(n_emp):
|
||||||
|
G.append([])
|
||||||
|
Ginv.append([])
|
||||||
|
|
||||||
|
for i in range(n_prec):
|
||||||
|
s = input().split()
|
||||||
|
x = int(s[0])
|
||||||
|
y = int(s[1])
|
||||||
|
G[x].append(y)
|
||||||
|
Ginv[y].append(x)
|
||||||
|
|
||||||
|
x, y, z = promote(G, Ginv, a, b)
|
||||||
|
print(x)
|
||||||
|
print(y)
|
||||||
|
print(z)
|
||||||
|
|
9
promo.txt
Normal file
9
promo.txt
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
3 4 7 8
|
||||||
|
0 4
|
||||||
|
1 2
|
||||||
|
1 5
|
||||||
|
5 2
|
||||||
|
6 4
|
||||||
|
0 1
|
||||||
|
2 3
|
||||||
|
4 5
|
Reference in a new issue