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

  • User Avatar
    zeroion

    문제링크

    [[BRUTEFORCE|problem:BRUTEFORCE]]

    현황

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

    알고리즘 설명

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

    소스


    ~~~ py
    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))

    </spoiler>
    

    10년 전
1개의 댓글이 있습니다.
  • User Avatar
    zeroion

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

    해결했습니다^


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