uva 11722 通过面积比算概率

来源:互联网 发布:神奇百货ceo骗局 知乎 编辑:程序博客网 时间:2024/04/29 19:34
#include <cstdio>double a, b, c, d, width, height, w;int T, kase;double get_area(double w){double ly = a + w, ry = b + w;double tx = d - w, bx = c - w;bool on_left   = c <= ly && ly <= d;bool on_right  = c <= ry && ry <= d;bool on_top    = a <= tx && tx <= b;bool on_bottom = a <= bx && bx <= b;if (on_left && on_right)   return (d - ly + d - ry) * width * 0.5;if (on_left && on_top)     return (d - ly) * (tx - a) * 0.5;if (on_top && on_bottom)   return (bx - a + tx - a) * height * 0.5;if (on_right && on_bottom) return height * width - (b - bx) * (ry - c) * 0.5;return ly <= c ? width * height : 0;}int main(int argc, char const *argv[]){scanf("%d", &T);while (T--){scanf("%lf%lf%lf%lf%lf", &a, &b, &c, &d, &w);width = b - a; height = d - c;printf("Case #%d: %.6lf\n", ++kase, (get_area(-w) - get_area(w)) / width / height);}return 0;}


坐标(t1,s1),(t2,s2)作边平行于坐标轴的矩阵,再作直线y=x+w和y=x-w,它们之间与矩阵相覆盖的阴影面积占矩阵总面积比就是答案 

过4个矩阵顶点作平行于y=x的直线,共分5个区域。分别根据w讨论y=x+w和y=x-w在哪个区域内,再计算非阴影面积,之后总面积减非阴影面积再除以总面积就可得到答案 

0 0
原创粉丝点击