LoginSignup
2
1

More than 3 years have passed since last update.

Pythonで毎日AtCoder #27

Last updated at Posted at 2020-04-05

はじめに

前回
昨日のABC161は+65でした。次に1200パフェくらいで茶色になれます。

#27

問題843diff
1TLE。
考えたこと
本番で解けなかった問題でした。グラフだと思っていたら、グラフ的な考えでなくても解けました。
$(i,j)(i,j\in Z,1\leq i < j\leq N)$な点を考えた時に、$i,j$の最短距離の個数を求める問題です。
これだけだと簡単ですが、この問題ではX-Y間に距離1で移動できる辺が用意されています。ですので、最短距離は$min(ショートカットを使わない、ショートカットを使う)$で考えます。ショートカットを使わない場合は、$j-i$になります。使う場合は$|y-j|+|x-i|+1$になります。第一項でj-Y間の距離、第二項でX-i間の距離を求めショートカットの距離1を足しています。

n, x, y = map(int,input().split())

ans = [0]*(n-1)
for i in range(1,n+1):
    for j in range(i+1,n+1):
        ans[min(j-i,abs(x-i)+1+abs(y-j))-1] += 1
for k in range(n-1):
    print(ans[k])

最初はansにappendして最後にcountしていたのですが、countだとO(N)になって計算量が増えてTLEしてしまいます。そこで、ans[距離]に+1していって最後に出力しています。

まとめ

グラフ感があったのに思ったよりも簡単だった。では、また。おやすみなさい

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1