2020년 5월 20일 수요일

3820. [Professional] 2일차 - 롤러코스터


새로운 정렬방법에 놀래서 나중에 활용하려고 올림.
sort시 key를 비교방식으로 한다. c++이랑 java에는 있던데 파이썬은 삭제됐더만..

주의할 점은 functools.cmp_to_key(func)의 리턴을 True나 False가 아닌 양수,0,음수로 받는다는 것. 두 비교 결과를 통해 제일 작은 건 맨 앞에, 큰 건 뒤로 오름차순 정렬은 같다.








import sys
import itertools
import functools
sys.stdin = open("sample_input.txt", "r")

def compare_rail(x,y):
    com1 = y[0]*(x[0]+x[1]) + y[1]
    com2 = x[0]*(y[0]+y[1]) + x[1]
    print(x,y,com1,com2,com1-com2)
    return com1-com2

T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
    # ///////////////////////////////////////////////////////////////////////////////////
    N = int(input())
    rail = [0] * (N)
    for i in range(N):
        a,b = map(int, input().split())
        rail[i] = (a,b)

    # rail.sort(key=lambda x:x[1]-x[0])
    cmp = functools.cmp_to_key(compare_rail)
    print(rail)
    rail.sort(key=cmp)
    print(rail)
    v = 1
    # vc = list(itertools.permutations(rail,r=5))
    # print(vc)
    for a,b in rail:
        v = ((a*v) + b) % 1000000007
        print(v)
    # v=1
    # for r in vc:
    #     v = 1
    #     print(r)
    #     for a, b in r:
    #         v = (a * v) + b
    #         print(v)
    # print(v % 1000000007)

    print("#{}".format(test_case),v % 1000000007)
    # ///////////////////////////////////////////////////////////////////////////////////

댓글 없음:

댓글 쓰기