题解:CF2120B Square Pool

· · 题解

题目简述:

有多组数据,对于每组数据,给定正方形台球桌的边长、台球个数、所有台球的位置和击球方向,求有多少台球能进洞。

题目分析

容易发现,在正方形台球桌上,若台球不能直接进洞,则会一直反弹。

题目中要求两球若相撞则应反弹。根据上面的发现可以得出,把它们看成不会相撞(按原路径继续运动),不会影响答案。

题目解答

直接判断台球能不能直接进洞,若能则答案加1。

代码

#include<bits/stdc++.h>
using namespace std;
int n, t, s, dx[1001], dy[1001], x[1001], y[1001], ans;

int main() {
    scanf("%d", &t);
    while (t--) {
        ans = 0;                                        //注意将ans归0
        scanf("%d%d", &n, &s);
        for (int i = 1; i <= n; i++) {
            scanf("%d%d%d%d", &dx[i], &dy[i], &x[i], &y[i]);
            if (dx[i] == -1 && dy[i] == 1) {            //向右上方
                if (s - x[i] == y[i]) {
                    ans++;
                }
            } else if (dx[i] == dy[i]) {                //向左上或右下方
                if (x[i] == y[i]) {
                    ans++;
                }
            } else if (dx[i] == 1 && dy[i] == -1) {     //向左下方
                if (s - x[i] == y[i]) {
                    ans++;
                }
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}