日期:2025年4月4日
ZeroJudge 題目連結:h660. 躲避球 (DodgeBall)
解題想法
按照題目敘述計算位置即可,不需要複雜的寫法。
Python 程式碼
使用時間約為 41 ms,記憶體約為 3.3 MB,通過測試。
import sys
for line in sys.stdin:
x, r, v = map(int, line.split()) # 阿茂的位置、接球的左右延伸長度、可接球的球速上限
for _ in range(int(input())): # 執行 n 次
p, s = map(int, input().split()) # 球的落點、速度
if x-r <= p <= x+r: # 球在可以接到的範圍內
if s <= v: x = p # 球速夠慢,可以接球,移動到 p
else: # 球速太快,不能接球
if p >= x: x -= 15 # 球在右邊或朝人過去,向左移 15
else: x += 15 # 球在左邊,向右移 15
print(x) # 印出最後的位置
C++ 程式碼
使用時間約為 2 ms,記憶體約為 92 kB,通過測試。
#include <cstdio>
using namespace std;
int main() {
int x, r, v; // 阿茂的位置、接球的左右延伸長度、可接球的球速上限
while(scanf("%d %d %d", &x, &r, &v) != EOF) {
int n; scanf("%d", &n); // 次數
for(int i=0; i<n; i++) { // 執行 n 次
int p, s; scanf("%d %d", &p, &s); // 球的落點、速度
if (p >= x-r && p <= x+r) { // 球在可以接到的範圍內
if (s <= v) { // 球速夠慢,可以接球,移動到 p
x = p;
} else { // 球速太快,不能接球
if (p >= x) x -= 15; // 球在右邊或朝人過去,向左移 15
else x += 15; // 球在左邊,向右移 15
}
}
}
printf("%d\n", x); // 印出最後的位置
}
return 0;
}
沒有留言:
張貼留言