QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#391994#6750. CalculateKir1sameWA 66ms10976kbPython31.8kb2024-04-17 00:23:382024-04-17 00:23:40

Judging History

你现在查看的是最新测评结果

  • [2024-04-17 00:23:40]
  • 评测
  • 测评结果:WA
  • 用时:66ms
  • 内存:10976kb
  • [2024-04-17 00:23:38]
  • 提交

answer

from queue import LifoQueue
ss:str = input()
st = LifoQueue()
ma = {}
s = ""
pos = []

for i in range(len(ss)):
    if ss[i]=='(':
        st.put(i)

    elif ss[i]==')':
        la = st.get()
        ma[la] = i
        ma[i] = la

    else:
        ma[i] = -1

    if ss[i] == '?':
        pos.append(i)


# def calc(l, r):
#     pt = l
#     while pt < r and s[pt].isdigit():
#         pt += 1
    
#     if pt == r:
#         return int(s[l:r])
    
#     if s[l] == '(':
#         pt = ma[l]+1
#         res = calc(l+1, ma[l])
#     else:
#         res = calc(l, pt)
    
#     if pt == r:
#         return res
#     if s[pt] == '+':
#         res += calc(pt+1, r)
#     else:
#         res -= calc(pt+1, r)

#     return res

# [l,r)
def calc(l, r):
    if s[l:r].isdigit():
        return int(s[l:r])
    
    pt = l
    res = 0
    if s[l] == '(':
        pt = ma[l]+1
        res = calc(l+1, ma[l])
        if pt == r:
            return res
        
    else:
        while pt < r and s[pt].isdigit():
            pt += 1
        res = int(s[l:pt])

    sign = 1
    if s[pt] == '-':
        sign = -1
    return res + sign * calc(pt+1, r)
    


    
mx = 0
if len(pos) == 0:
    s = ss
    mx = calc(0,len(s))

elif len(pos) ==1:
    s = ss[:pos[0]] + '0' + ss[pos[0]+1:]
    mx = calc(0, len(s))
    for i in range(10): 
        s = ss[:pos[0]] + str(i) + ss[pos[0]+1:]
        mx = max(mx, calc(0, len(s)))
        
elif len(pos) == 2:
    s = ss[:pos[0]] + '0' + ss[pos[0]+1:pos[1]] + '0' + ss[pos[1]+1 : ]
    mx = calc(0, len(s))

    for i in range(10):
        s = ss[:pos[0]] + str(i) + ss[pos[0]+1:]

        for j in range(10):
            s = s[:pos[1]] + str(j) + s[pos[1]+1:]
            mx = max(mx, calc(0, len(s)))

print(mx)

                

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 19ms
memory: 10724kb

input:

?+?

output:

18

result:

ok 1 number(s): "18"

Test #2:

score: 0
Accepted
time: 13ms
memory: 10676kb

input:

(?+9)-(?+1)

output:

17

result:

ok 1 number(s): "17"

Test #3:

score: -100
Wrong Answer
time: 66ms
memory: 10976kb

input:

((9)-(((8)-(2))+(((1+(1))-(1+((2)+2+2)))+(5)+4))+(((7)-((9)+3))-((8)-(0-(2))+0))+((6)-(6+(((4)-(9))-(8-((9)+(1))+(0)))+(2-((9)+7))-(1)))-((((7)+(1))-((3)+(3)))-((2)-((6)-((3)-(8)))))+(2+0-((6)-(1))))-((((3)-(((0)+((4)-(9))+((6+8)+4)+(5)-(4-(3)-(8)))-((8)-(2))))+(((2)-(4))+(6)-(2))+(6-(1))-((2+9)-(3+...

output:

-151

result:

wrong answer 1st numbers differ - expected: '-63', found: '-151'