D - Line++
ABC160のD問題。
これはしっかりしたbfsで問題を解ける。 回答に乗っている方法はちょっとむずかしい。
最短経路問題と捉える事もできそう。
import collections
def solve():
N, X, Y = map(int, input().split())
inf = 10 ** 9
# 配列の0つき初期化はこう書ける
ans = [0]*N
# bfsはだいたいこんなpushがある
# vは次の頂点、dはその頂点までの距離、distは各頂点までの距離を入れる
# qには次の頂点が入る
# 操作中の頂点はコードにはない(陽に持たない)
def push(v, d, dist, q):
if dist[v] == inf:
dist[v] = d
q.append(v)
for i in range(N):
q = collections.deque()
dist = [inf]*N
push(i, 0, dist, q)
while(len(q)):
v = q.popleft()
d = dist[v]
if v < N-1:
push(v+1, d+1, dist, q)
if 0 < v:
push(v-1, d+1, dist, q)
if v == X-1:
push(Y-1, d+1, dist, q)
if v == Y-1:
push(X-1, d+1, dist, q)
for i in range(N):
ans[dist[i]] += 1
# 往復しているので半分にする
for i in range(1, N):
print(ans[i]//2)
if __name__ == "__main__":
solve()