QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#391994 | #6750. Calculate | Kir1same | WA | 66ms | 10976kb | Python3 | 1.8kb | 2024-04-17 00:23:38 | 2024-04-17 00:23:40 |
Judging History
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'