import fractions
import time
import copy
import random
import sys
sys.setrecursionlimit(100000000)

class Node:
    def setVal(this, val):
        this.op = "value"
        this.result = val
        return this
    
    def read(this):
        if this.op == "value":
            return this.result
        leftVal = this.left.read()
        rightVal = this.right.read()
        if this.op == "concat":
            mul = 1
            tmp = rightVal
            while tmp > 0:
                mul *= 10
                tmp //= 10
            result = leftVal * mul + rightVal
        elif this.op == "+":
            result = leftVal + rightVal
        elif this.op == "-":
            result = leftVal - rightVal
        elif this.op == "/":
            result = leftVal / rightVal
        elif this.op == "*":
            result = leftVal * rightVal
        return result
    
    def setOp(this, leftNode, rightNode, typeOp):
        this.left = leftNode
        this.right = rightNode
        this.op = typeOp
        this.result = this.read()
        return this
    
    def getNodeList(this):
        if this.op == "value":
            return [this]
        else:
            return this.left.getNodeList() + [this] + this.right.getNodeList()
    
    def getString(this):
        if this.op == "value":
            return str(this.result)
        elif this.op == "concat":
            return "(" + this.left.getString() + " " + this.right.getString() + ")"
        else:
            return "(" + this.left.getString() + this.op + this.right.getString() +  ")"

ops = ["concat", "+", "-", "*", "/"]

n = int(input())
a = list(map(int, input().split()))
# 甘え(デバッグつらいので)
start_time = time.time()
node_vals = [Node().setVal(v) for v in a]
# 流石に超えんやろ
cur_val = float("inf")
cur_str = ""

# 時間いっぱい(白目)
use_time = 5
if n > 500:
    use_time = 1

# 取り敢えず何か作ってみる?
tmp_node_vals = copy.deepcopy(node_vals)
# shuffle
random.shuffle(tmp_node_vals)
main = tmp_node_vals[0]
# 前から適当に繋いでいく
for i in range(1, n):
    if i == 1:
        use = random.randint(0, 4)
    else:
        use = random.randint(1, 4)
    main = Node().setOp(main, tmp_node_vals[i], ops[use])
getVal = main.read()
if abs(getVal-100) < abs(cur_val-100):
    # print(getVal, result)
    cur_val = getVal
    cur_str = main.getString()

node_list = main.getNodeList()
while time.time() - start_time < use_time:
    # どれかノードを選んで変えるだけ
    idx = random.randint(0, len(node_list) - 1)
    if node_list[i].op == "value":
        continue
    to = random.randint(1, 4)
    node_list[i].op = ops[to]
    new_val = main.read()
    if abs(cur_val-100) < abs(new_val-100):
        new_val = cur_val
        cur_str = main.getString()

print(cur_str)

Battle History

ConfigScoreDate
komachi baby9998233463002019/11/22 17:13:57
5 small9997879426002019/11/22 17:13:57
5 small9998078314002019/11/22 17:13:57
5 small9998002258002019/11/22 17:13:57
20 middle9991144570002019/11/22 17:13:57
20 middle9997350287002019/11/22 17:13:57
20 middle9997998163002019/11/22 17:13:57
1000 large9978566502002019/11/22 17:13:57
1000 large02019/11/22 17:13:57
1000 large02019/11/22 17:13:57