专栏文章

题解:CF2120B Square Pool

CF2120B题解参与者 8已保存评论 8

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
8 条
当前快照
1 份
快照标识符
@miog3g0q
此快照首次捕获于
2025/12/02 18:38
3 个月前
此快照最后确认于
2025/12/02 18:38
3 个月前
查看原文

题目简述:

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

题目分析

容易发现,在正方形台球桌上,若台球不能直接进洞,则会一直反弹。
题目中要求两球若相撞则应反弹。根据上面的发现可以得出,把它们看成不会相撞(按原路径继续运动),不会影响答案。

题目解答

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

代码

CPP
#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;
}

评论

8 条评论,欢迎与作者交流。

正在加载评论...