USACO 1.4 Wormholes Python3

"""
ID: ***
LANG: PYTHON3
TASK: wormhole
"""
fin = open ('wormhole.in', 'r')
fout = open ('wormhole.out', 'w')
N = int(fin.readline())
total_List = list()
def checkPairings(listGenrt,crd):
    for i in range(len(crd)):#assign starting point
        sPt = crd[i]
        lG = list(listGenrt)
        org = list(sPt)
        nXt = []
        num = 0
        while(True):#checking solutions of this starting point
            for tpl in listGenrt:
                if sPt in tpl:
                    sPt = tpl[0 if tpl.index(sPt) == 1 else 1]
                    if tpl in lG:
                        lG.remove(tpl)

            for x in crd:
                if x[1] == sPt[1] and x != sPt and x[0] > sPt[0]:
                    if nXt==[] or (nXt!=[] and x[0] < nXt[0]):
                        nXt =  x
 
            if(nXt==[]):#can't find wh with the same Y value
                break
            sPt = list(nXt)
            nXt = []
            if sPt == org and len(lG)!=len(listGenrt):
                num+=1
                break

        if num!=0:
            total_List.append(listGenrt)
            break
   
def createPairings(remaining):
    if len(remaining)==0:
        return

    for x in range(1,len(remaining)):
        if(x>1):
            P2 = list(pairings)
            #print("---{}".format(P2))
            checkPairings(P2,crd)

            del pairings[(len(P2)-int(len(remaining)/2)):len(P2)]

        pairings.append((remaining[0], remaining[x]))
        p = list(remaining)
        p.pop(0)
        p.pop(x-1)
        createPairings(p)
        if(x==len(remaining)-1 and len(pairings)==len(remaining)/2):
            checkPairings(pairings,crd)

crd = list()
pairings = list()
for x in range(N):
    c = list(map(int,fin.readline().split()))
    crd.append(c)
#print(crd)
createPairings(crd)
fout.write("{}\n".format(str(len(total_List))))
fout.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值