http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3720
题意:
在一个矩形区域投掷飞镖,因此飞镖只会落在整点上,投到每个点的得分是Ax+By。矩形区域里面有个多边形,如果飞镖投在多边形里面则得分,求最终的得分期望。
即:给定一个矩形内的所有整数点,判断这些点是否在一个多边形内
方法:
计算几何的判点是否在多边形内(几何模板),如果在,则令得分加(Ax+By)*以此点为中心边长为1的正方形面积
1 void solve()
2 {
3 double ans = 0;
4 for (int i = p.x; i <= q.x; i++)
5 {
6 for (int j = p.y; j <= q.y; j++)
7 {
8 if (PointInPolygon(Point2D(i, j), poly.v, poly.n))
9 ans += (a * i + b * j) * (min(i + 0.5, q.x) - max(i - 0.5, p.x)) * (min(j + 0.5, q.y) - max(j - 0.5, p.y));
10 }
11 }
12 printf("%.3f\n", ans / (q.x - p.x) / (q.y - p.y));
13 }
代码:

1 // #pragma comment(linker, "/STACK:102400000,102400000")
2 #include
3 #include
4 #include
5 #include <string>
6 #include
7 #include <set>
8 #include
9 #include
View Code
转载于:https://www.cnblogs.com/xysmlx/p/3870091.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!