■要約
N=1以外の時は,総数がK*(K-1)*(K-2)^(N-2)になることはすぐに分かったが,累乗の計算量はO(N)なのでどうしようかと考えていた.調べたら,繰り返し2乗法というものがあり,計算量をO(logN)に減らせる.
説明は他の方々がとてもわかり易いものを記載しているので割愛する.
pythonだとわざわざ実装しなくても
pow(x,y,n)でx^yをnで割ったあまりをO(logN)で計算してくれるらしい.鬼便利
N, K = map(int, inp
■要約
解き方はすぐに思いついた.でてきた単語をリストに入れていって毎回の入力で得た単語がそのリストの中に入っているか確かめていけば良いと考えた.しかし,pythonではlist型におけるinの平均計算量はO(N)のため,毎回のループでこれを行うとO(N^2)の計算量が必要になりTLEとなってしまう.これを防ぐ方法は案外簡単で,set型を用いればよい.setは同じ値の重複を許さないような型なので,inの平均計算量がO(1)で済む.素晴らしい.
N = int(input
■誤解答
方針自体はすぐに思いついた.求めたい場所に対して縦と横の総和からその場所の値を引けば良いと考え実装.この際,行列の縦と横の総和の取り方が分からず迷う.縦の総和はlistで行けるが,横の総和はnpにしないとsum関数を使って上手くできない.
import numpy as npH, W = map(int, input().split())ans = 0a = [list(map(int, input().split())) for l in range(H)]a