不会
%%%%%%%%%%%%%%%
by Rogers_wang @ 2020-01-11 08:31:08
## 自问自答...
虽然还说不太清楚,但是可以大致确定是`input`的问题。后面分别参考牛客和leetcode上读取数据的风格进行了对输入读取的调整,都是可以AC的。
### sys.stdin.readline
```python
import sys
stream = sys.stdin
def readline():
return stream.readline().strip()
matrix = {}
n = int(readline())
for i in range(n):
m, r, c = readline().split()
matrix[m] = (int(r), int(c))
while 1:
s = readline()
if not s: break
stack = []
res = 0
for c in s:
if c == '(':
continue
elif c == ')':
m2 = stack.pop()
m1 = stack.pop()
if m1[1] != m2[0]:
print('error')
break
else:
stack.append((m1[0], m2[1]))
res += m1[0] * m1[1] * m2[1]
else:
stack.append(matrix[c])
else:
print(res)
```
参考[牛客网在线判题系统使用帮助](https://www.nowcoder.com/discuss/276)
也可以直接用`for`循环:
```python
import sys
for line in sys.stdin:
a = line.split()
print(int(a[0]) + int(a[1]))
```
### io.TextIOWrapper+生成器
```python
import sys
import io
def readlines():
for line in io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8'):
yield line.strip('\n')
lines = readlines()
matrix = {}
n = int(next(lines))
for i in range(n):
m, r, c = next(lines).split()
matrix[m] = (int(r), int(c))
while 1:
try:
s = next(lines)
except StopIteration:
break
if not s:
break
else:
stack = []
res = 0
for c in s:
if c == '(':
continue
elif c == ')':
m2 = stack.pop()
m1 = stack.pop()
if m1[1] != m2[0]:
print('error')
break
else:
stack.append((m1[0], m2[1]))
res += m1[0] * m1[1] * m2[1]
else:
stack.append(matrix[c])
else:
print(res)
```
随便开个playground就能看到。
by IronSky @ 2020-01-11 18:49:49