L. 斩
Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: Main Submit Status PID: 29379在电影里面,我们经常可以看到武士们拔出刀,然后一刀斩下去,结果………………………………一张纸片被砍成了两半,?…………
而在本题中,我们需要计算一下被斩下去较小的那一部分的面积。
我们假设纸片是矩形的,平行于坐标轴的,武士砍纸片的轨迹是一条直线。
Input
第一行一个整数N(2<=N<=350),表示数据组数。
接下来一行,每行7个整数,xl,yl,xr,yr,a,b,c ,表分别表示矩形左下角坐标(xl,yl),右上角坐标(xr,yr),以及轨迹方程ax+by+c=0。整数的绝对值均小于200。
Output
对于每一组数据,输出一个三位小数,表示砍后较小那部分的面积。数据保证这个面积大于0.001。
Sample Input
3 1 1 3 3 -1 1 0 1 1 3 4 -1 1 0 1 2 3 4 -1 1 0
Sample Output
2.000 2.000
0.500 | |
思路:矩形有四条边 都延伸开---|----------|----------
| |
------|----------|------------
直线ax+by+c=0 与它有四个交点 、
找出四个交点的总哪两个是在矩形上的就可以算了(当时little yellow想出的方法和这不同 我听了1个多小时没懂 就不想写了)
?
#include#include #include #include #include using namespace std; int t; int main() { int t; scanf("%d",&t); while(t--) { double S,s; double x1,y1,x2,y2,a,b,c; double Xy1,Xy2,x1Y,x2Y; scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2); scanf("%lf%lf%lf",&a,&b,&c); Xy1=(c+b*y1)*1.0/-a;//下边点 Xy2=(c+b*y2)*1.0/-a;//上边点 x1Y=(c+a*x1)*1.0/-b;//左边点 x2Y=(c+a*x2)*1.0/-b;//右边点 // cout<
?