質問内容
以下のコードの計算量を教えてください。Atcoder,ARC104-B問題です。
計算量はO(N^2)と判断しました。Nは最大でも5,000しかとらないと明言されているため、計算量は多く見積もっても10^8で収まると考えましたがTLEとなりました。
以下のコードの計算量を教えてください。
また、計算量に問題がないのであればどの部分で計算量が増大してしまったのかも併せて教えていただけると幸いです。
ソースコード
python3
1from operator import sub 2 3N,S = input().split() 4 5N = int(N) 6ans = 0 7 8codes = [[0,0,0,0]] 9 10for i in range(N): 11 codes.append(codes[i][:]) 12 if S[i] == "A": 13 codes[i+1][0] += 1 14 elif S[i] == "T": 15 codes[i+1][1] += 1 16 elif S[i] == "G": 17 codes[i+1][2] += 1 18 elif S[i] == "C": 19 codes[i+1][3] += 1 20tem = [] 21 22for i in range(N+1): 23 for j in range(i+1,N+1): 24 tem.append(list(map(sub,codes[j],codes[i]))) 25 26for l in tem: 27 if l[0] == l[1] and l[2] == l[3]: 28 ans += 1 29 30print(ans)
試したこと
一番オーダーが大きい部分はi,jの二重ループでappendの計算量はO(1)のため、計算量はO(N^2)と判断しました。
補足情報
初めての質問ですので、何か失礼がありましたらご教示いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/03 21:20