Yukicoder No.455 冬の大三角

,

http://yukicoder.me/problems/no/455

一直線上にあるかどうかは外積で判定できる。 乱択をして判定なしで答えてもも失敗確率は$0.5$未満であるので、(テストケース次第ではあるが)何度も提出すれば通る気がする。

#!/usr/bin/env python3
h, w = map(int, input().split())
s = [ input() for _ in range(h) ]
stars = []
for y in range(h):
    for x in range(w):
        if s[y][x] == '*':
            stars += [( y, x )]
assert len(stars) == 2
for y in range(h):
    for x in range(w):
        if len(stars) == 3:
            continue
        if s[y][x] == '-':
            ay, ax = stars[0]
            by, bx = stars[1]
            if (ay - y) * (bx - x) != (ax - x) * (by - y):
                s[y] = list(s[y])
                s[y][x] = '*'
                s[y] = ''.join(s[y])
                stars += [( y, x )]
for line in s:
    print(line)