题解:CF2120B Square Pool
xch_nailong · · 题解
题目简述:
有多组数据,对于每组数据,给定正方形台球桌的边长、台球个数、所有台球的位置和击球方向,求有多少台球能进洞。
题目分析
容易发现,在正方形台球桌上,若台球不能直接进洞,则会一直反弹。
题目中要求两球若相撞则应反弹。根据上面的发现可以得出,把它们看成不会相撞(按原路径继续运动),不会影响答案。
题目解答
直接判断台球能不能直接进洞,若能则答案加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;
}