竞赛讨论区 > 五个小时搞了一道,还没通过算例,尴尬
头像
嘉慕
发布于 2018-12-01 18:11
+ 关注

五个小时搞了一道,还没通过算例,尴尬

import math
#因式分解
def factoring(n):
    ret = []
    while n > 1:
        for i in range(n-1):
            k = i+2
            if n % k == 0:
                ret.append(k)
                n = int(n / k)
                break
    return ret
#生成n的组合
def combination(n):
    ret=[]
    #为1时特殊处理
    if n==1:
        ret.append([1,1])#第一组组合
        return ret
        
    ret.append([1,n])#第一组组合
    ret.append([n,1])#还需要反转下
    
    ids=factoring(n)
    #print(ids)
    ids = list(set(ids))#去重
    #print(ids)
    #去掉大于平方根的值
    Nsqrt=math.sqrt(n)
    ids=[i for i in ids if i <=Nsqrt]
    #print(ids)
    for a in ids:
        b=int(n/a)
        ret.append([a,b])
        ret.append([b,a])#还需要反转下
    
    return ret
#end

def main(N,M,n):
    total=0
    tempTotal=[]#每个组合中的三角形数量
    tempR=[]#每个组合中的矩形数量
    res=combination(n)
    for item in res:
        l=item[0]
        h=item[1]

        Nl=max(N-l+1,0)#小于0的不行
        Mh=max(M-h+1,0)
        
        Rnum=Nl*Mh#矩形数量
        Tnum=(h+1)*(l+1)#三角形的数量-4
        tempR.append(Rnum)
        tempTotal.append(Rnum*Tnum)
        total+=Rnum*Tnum
    #print(tempR)
    #print(tempTotal)
    print(total)
    return total
#测试部分
INF = 10000
t = int(input())
for i in range(t):
    list1 = input().split()
    N=int(list1[0])
    M=int(list1[1])
    S=int(list1[2])
    main(N,M,S)
#print(res)
不知道为啥没通过,第一次比赛,好桑心。

全部评论

(0) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐