熱門文章

2025年4月4日 星期五

ZeroJudge 解題筆記:h660. 躲避球 (DodgeBall)

作者:王一哲
日期: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;
}


沒有留言:

張貼留言