tl;dr
PyPy を使おう
問題文
競プロ典型 90 問 004 - Cross Sum(★2)(要ログイン・参加登録)
AC コード
import sys input = sys.stdin.readline def linput(ty=int, cvt=list): return cvt(map(ty,input().split())) # ...中略... def main(): H,W = linput() mA = [linput() for _ in range(H)] vH = [sum(va) for va in mA] vW = [sum(ta) for ta in zip(*mA)] mR = [] for va,h in zip(mA,vH): mR.append([h+w-a for a,w in zip(va,vW)]) for vr in mR: print(*vr) if __name__ == "__main__": main()
提出結果
AC - 1975 ms (Python 3.8.2)
険しい……
PyPy での提出結果
AC - 908 ms (PyPy3 7.3.0)
さすが PyPy、速いですね。
追記:あの素晴らしい AC をもう一度
記事用に読みやすく書き換えて再提出しました。
TLE - 2058 ms (Python 3.8.2)
通らない!笑
結論
素の Python で通すのは難しい。 PyPy を使おう。
追記 2
ちょっとだけダイエットに成功しました。
AC - 1928 ms (Python 3.8.2)
import sys input = sys.stdin.readline def linput(ty=int, cvt=list): return cvt(map(ty,input().split())) # ...中略... def main(): H,W = linput() mA = [linput() for _ in range(H)] vH = [sum(va) for va in mA] vW = [sum(ta) for ta in zip(*mA)] for va,h in zip(mA,vH): print(*(h+w-a for a,w in zip(va,vW))) if __name__ == "__main__": main()
これ以上は、しません。