筋肉で解決しないために。

日々出会うモノに対する考察をしたり、主に以下のテーマに関して書いています。 データサイエンス/人工知能/AI/機械学習/DeepLearning/Python//数学/統計学/統計処理

Ringo's Favorite Numbers 2 を python で解く

競技プログラミングをはじめました。
おもしろいです。

TLE (Time Limit Exceeded): 問題で指定された実行時間以内にプログラムが終了しませんでした なんてものがあるのですね。
愚直に回してTLEだった問題を解説読んだらできたので書いておこうと思いました。

問題 atcoder.jp

数列の要素を引き算して200の倍数になる組み合わせの総数を求めます。 全部試せば良いと思って最初に書いた回答 (TLE)

N = int(input())
A = list(map(int, input().split()))
 
counter=0
all_set = []
for x in range(N):
    for i in range(N):
        if x+1 < i+1:
          if (A[x+1-1] - A[i+1-1]) % 200 == 0:
            counter+=1
print(counter)

f:id:watarumon:20210511214439p:plain
1

解説を読むと

200で割った余りがA[j]と等しいA[i]の個数が分かればいい とあります。

Editorial - KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)

なるほどと思って書き直したもの

N = int(input())
A = list(map(int, input().split()))
 
counter=0
a = [x%200 for x in A]
for x in set(a):
  n = a.count(x)
  counter+=(n*(n-1))/2
print(int(counter))

f:id:watarumon:20210511214622p:plain
1

できました~ 👌


1文字の変数名を使うのは背徳感があって良いですね...