Untitled

 avatar
unknown
python
3 years ago
1.6 kB
5
Indexable
import sys
import time

def list_input():
    start = time.time()
    N = int(input())
    num = []
    for line in sys.stdin:
        num.extend(int(s) for s in line.split())
    end = time.time()
    print('Intag', end-start)
    return num, N


def list_sorter(num, N):
    start1 = time.time()
    M = [None]*N
    W = [None]*N
    for i in range(0, 2*N*(N+1),  N+1):
        if W[num[i]-1] is None: 
            W[num[i]-1] = num[i:i+N+1]
        else:
            M[num[i]-1] = num[i:i+N+1]
    end1 = time.time()
    print('Sortering', end1-start1)
    return W, M

def sortW(W):
    N = len(W)
    V = [None]*N
    temp = [0]*(N*(N+1))
    for i in range(0,N):
        temp[i*(N+1)] = i+1
        for j in range(1,N+1):
            t = W[i][j]
            temp[i*(N+1)+t] = j
        V[i] = temp[i*(N+1):(i+1)*(N+1)]
    return V

def GS(W, M):
    p = []
    t = [None]*len(W)
    start3 = time.time()
    W = sortW(W)
    end3 = time.time()
    print('SortW', end3-start3)

    start2 = time.time()
    for men in M:
        p.append([men[0],1])
    while len(p) > 0:
        m = p.pop(0)
        w = M[m[0]-1][m[1]]
        m[1] = m[1]+1
        if t[w-1] is None:
            t[w-1] = m
        elif(W[w-1][t[w-1][0]]-W[w-1][m[0]] > 0):
            p.append(t[w-1])
            t[w-1] = m
        else:
            p.append(m)
    end2 = time.time()
    print('GS', end2-start2)
    #for i in range(0,len(t)):
        #print(t[i][0])


num, N = list_input()
W, M = list_sorter(num, N)
#print(W)
#print(M)
GS(W, M)
Editor is loading...