Editorial for The Cubic End


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
import sys


def is_solution(n, ending, number):
    if len(number) != n:
        return False
    number = int(''.join(map(str, number)))
    return (number**3%(10**n))==ending

def extend_solution(n, number):
    if len(number) >= n:
        return
    else:
        for n in range(10):
            yield [n] + number

def test(ending, number):
    n = len(number)
    number = int(''.join(map(str, number)))
    return (number**3%(10**n))==(ending%(10**n))

def backtracking(n, ending, number):
    if is_solution(n, ending, number):
        return int(''.join(map(str, number[1:])))
    else:
        for new_number in extend_solution(n,number):
            if test(ending, new_number):
                result = backtracking(n, ending, new_number)
                if result is not False:
                    return result
    return False

_cases = sys.stdin.readline()
for n_str in sys.stdin.readlines():
    n = int(n_str)
    print(backtracking(len(n_str), n, []))

Comments

There are no comments at the moment.