結果
| 問題 |
No.1624 三角形の反射
|
| コンテスト | |
| ユーザー |
qwewe
|
| 提出日時 | 2025-05-14 12:53:38 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,898 bytes |
| コンパイル時間 | 464 ms |
| コンパイル使用メモリ | 82,788 KB |
| 実行使用メモリ | 76,764 KB |
| 最終ジャッジ日時 | 2025-05-14 12:55:24 |
| 合計ジャッジ時間 | 3,088 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 18 WA * 4 |
ソースコード
def main():
import sys
a = float(sys.stdin.readline().strip())
epsilon = 1e-8
max_reflections = 10**6
current_x = 0.0
current_y = 0.0
direction_dx = 1.0
direction_dy = a
reflections = 0
while reflections <= max_reflections:
# Compute possible edges
t_ab = float('inf')
valid_ab = False
if direction_dy < -epsilon:
t_ab = (0.0 - current_y) / direction_dy
x_ab = current_x + direction_dx * t_ab
if -epsilon <= x_ab <= 1.0 + epsilon:
valid_ab = True
t_ac = float('inf')
valid_ac = False
if direction_dx < -epsilon:
t_ac = (0.0 - current_x) / direction_dx
y_ac = current_y + direction_dy * t_ac
if -epsilon <= y_ac <= 1.0 + epsilon:
valid_ac = True
t_bc = float('inf')
valid_bc = False
denominator = direction_dx + direction_dy
if abs(denominator) > epsilon:
t_bc = (1.0 - current_x - current_y) / denominator
if t_bc > epsilon:
x_bc = current_x + direction_dx * t_bc
y_bc = current_y + direction_dy * t_bc
if (-epsilon <= x_bc <= 1.0 + epsilon and
-epsilon <= y_bc <= 1.0 + epsilon):
valid_bc = True
# Find the minimal positive t
min_t = float('inf')
edge = None
if valid_ab and t_ab > epsilon:
if t_ab < min_t:
min_t = t_ab
edge = 'AB'
if valid_ac and t_ac > epsilon:
if t_ac < min_t:
min_t = t_ac
edge = 'AC'
if valid_bc and t_bc > epsilon:
if t_bc < min_t:
min_t = t_bc
edge = 'BC'
if min_t == float('inf'):
print(-1)
return
# Update current position
new_x = current_x + direction_dx * min_t
new_y = current_y + direction_dy * min_t
# Check if new position is a vertex
if (abs(new_x - 0.0) < epsilon and abs(new_y - 0.0) < epsilon):
print("A", reflections)
return
if (abs(new_x - 1.0) < epsilon and abs(new_y - 0.0) < epsilon):
print("B", reflections)
return
if (abs(new_x - 0.0) < epsilon and abs(new_y - 1.0) < epsilon):
print("C", reflections)
return
# Update direction and increment reflections
current_x = new_x
current_y = new_y
reflections += 1
if edge == 'AB':
direction_dy *= -1
elif edge == 'AC':
direction_dx *= -1
elif edge == 'BC':
new_dx = -direction_dy
new_dy = -direction_dx
direction_dx, direction_dy = new_dx, new_dy
print(-1)
if __name__ == "__main__":
main()
qwewe