BRUTEFORCE 마지막 예제가 틀리게 나오네요.

  • zeroion
    zeroion

    문제링크

    BRUTEFORCE

    현황

    예제 케이스중 1,2,3번째는 똑같이 나오는데
    예제 4번째 케이스가 틀리게 나옵니다. ㅜ

    알고리즘 설명

    링크
    (사진이 커서 죄송합니다. 링크를 들어가시면 보실수 있습니다)
    알고리즘

    소스

    import sys
    # sys.stdin = open('cases/bruteforce.txt')
    
    
    cache = dict()
    
    
    def normalize(num):
        if num >= 1000000007:
            num %= 1000000007
        return num
    
    
    for c in range(int(input())):
        A, B, N = list(map(int, input().split()))
    
        # AB 길이
        ab_len = B - A + 1
    
        # 초기화
        s = 0
        i = 0
    
        # 첫번째 항
        p = N
        s += p
        i += 1
    
        # 일정항 까지의 합을 저장해둠. (마지막 연산을 위해서)
        cache = dict()
        cache[1] = N
    
        while True:
            if i << 1 > ab_len:
    
                # 마지막 연산
                rest = ab_len - i
                rest_arr = list(bin(rest)[2:])
                i = 1
                s_part = 0
                for j in list(reversed(rest_arr)):
                    if j == '1':
                        s_part += cache[i]
                    i <<= 1
                tmp = p * s_part
                tmp = normalize(tmp)
                s += tmp
                s = normalize(s)
                break
    
            else:
                tmp = p * s
                tmp = normalize(tmp)
                s += tmp
                s = normalize(s)
                i <<= 1
                cache[i] = s
                p = pow(p, 2)
                p = normalize(p)
    
        # TODO: 최적화 해야함
        # N 을 A - 1 번 곱한다.
        base = 1
        if A != 1:
            base = 1
            for i in range(1, A):
                base *= N
                base = normalize(base)
        print(normalize(s * base))
    
    # 기본 풀이
    # for c in range(int(input())):
    #     A, B, N = list(map(int, input().split()))
    #     a = pow(N, A)
    #     b = 1
    #     c = 1
    #     for i in range(1, B - A + 1):
    #         c *= N
    #         b += c
    #         normalize(b)
    #     print(normalize(a * b))
    


    8년 전
1개의 댓글이 있습니다.
  • zeroion
    zeroion

    마지막 연산 하는 부분 구현이 잘못되어 있었네요..;;

    해결했습니다^^


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.