白駿14888号:演算子の挿入

8545 ワード

埋め込み水平演算子
  • 初めて解いた時、ずっと間違っていたと言っていましたが、
  • 問題の最小値は0で、大きすぎます
  • したがって、import sysで非常に小さな値を入力したり、最小値をfloat("-inf")に設定したり、最大値をに設定したりすることができる.
  • set(permutations(operators, N-1)) and permutations(operators,N-1)
  • setを使わないとタイムアウト(なぜかを学ぶ!)
  • from itertools import permutations
    import sys
    
    def solution():
        max_result = -sys.maxsize - 1
        min_result = sys.maxsize
        for operator in set(permutations(operators,N-1)):
            # tmp_arr = copy.deepcopy(arr) >> 시간 너무 오래 걸림
            result = arr[0]
            for i,oper in enumerate(operator):
                if oper == "+":
                    result += arr[i+1]
    
                elif oper == "-":
                    result -= arr[i+1]
    
                elif oper == "*":
                    result *= arr[i+1]
    
                else:
                    if result < 0:
                        result *= -1
                        result //= arr[i+1]
                        result *= -1
                    else:
                        result //= arr[i+1]
    
            min_result = min(min_result,result)
            max_result = max(max_result,result)
    
        return max_result,min_result
    
    N = int(input())
    arr = list(map(int,input().split()))
    n_operators = list(map(int,input().split()))
    
    operators = ["+"] * n_operators[0]
    operators += ["-"] * n_operators[1]
    operators += ["*"] * n_operators[2]
    operators += ["/"] * n_operators[3]
    
    answer_list = solution()
    print(answer_list[0])
    print(answer_list[1])