求助Python RE(本地测试样例是可以)

UVA442 Matrix Chain Multiplication

不会 %%%%%%%%%%%%%%%
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


|