poj 2826(好坑,线段相交问题)
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 11576 | Accepted: 1760 |
Description

Your mission is to calculate how much rain these two boards can collect.
Input
Each test case consists of 8 integers not exceeding 10,000 by absolute value, x1, y1, x2, y2, x3, y3, x4, y4. (x1, y1), (x2, y2) are the endpoints of one board, and (x3, y3), (x4, y4) are the endpoints of the other one.
Output
each test case output a single line containing a real number with
precision up to two decimal places - the amount of rain collected.
Sample Input
2
0 1 1 0
1 0 2 1 0 1 2 1
1 0 1 2
Sample Output
1.00
0.00
一点都不easy...
aaarticlea/png;base64,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" alt="" width="439" height="193" />没能AC的看看吧。。
discuss里面参考数据:
9
样例一:
6259 2664 8292 9080 1244 2972 9097 9680
答案:6162.65 样例二:
0 1 1 0
1 0 2 1
答案:1.00 样例三:
0 1 2 1
1 0 1 2
答案:0.00 样例四:
0 0 10 10
0 0 9 8
答案:0.00 样例五:
0 0 10 10
0 0 8 9
答案:4.50 样例六: //这组数据其实我没过也AC了
0.9 3.1 4 0
0 3 2 2
答案:0.50 样例七:
0 0 0 2
0 0 -3 2
答案:3.00 样例八:
1 1 1 4
0 0 2 3
答案:0.75 样例九:
1 2 1 4
0 0 2 3
答案:0.00
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
const double eps = 1e-;
struct Point
{
double x,y;
};
double cross(Point a,Point b,Point c)
{
return (a.x-c.x)*(b.y-c.y)-(a.y-c.y)*(b.x-c.x);
}
///规范相交
bool isCross(Point a,Point b,Point c,Point d)
{
if(cross(c,b,a)*cross(b,d,a)<-eps) return false; ///这里要改成eps我上面的那组数据才能为0.5..不过是0也能AC。。so strange
if(cross(a,d,c)*cross(d,b,c)<-eps) return false;
return true;
}
///计算两条直线的交点
Point intersection(Point a,Point b,Point c,Point d)
{
Point p = a;
double t = ((a.x-c.x)*(c.y-d.y)-(a.y-c.y)*(c.x-d.x))/((a.x-b.x)*(c.y-d.y)-(a.y-b.y)*(c.x-d.x));
p.x +=(b.x-a.x)*t;
p.y +=(b.y-a.y)*t;
return p;
}
int main()
{
int tcase;
scanf("%d",&tcase);
while(tcase--)
{
Point a,b,c,d;
scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y);
scanf("%lf%lf%lf%lf",&c.x,&c.y,&d.x,&d.y);
if(a.y==b.y||c.y==d.y||!isCross(a,b,c,d)) ///排除水平放置还有不相交的情况
{
printf("0.00\n");
continue;
}
Point p = intersection(a,b,c,d); ///交点
double y = min(max(a.y,b.y),max(c.y,d.y));
if(y<=p.y) ///上面的y不可能小于交点,不然接不到水
{
printf("0.00\n");
continue;
}
///我只要y上面的点
Point t1,t2;
if(a.y>b.y) t1 = a;
else t1 = b;
if(c.y>d.y) t2 = c;
else t2 = d;
///两个向量极角大的x坐标必定小于极角小的,不然雨水没办法流进去
if(cross(t1,t2,p)>&&t1.x>t2.x||cross(t2,t1,p)>&&t2.x>t1.x)
{
double k,B,x,x0;
if(y==t1.y)
{
x = t1.x;
if(t2.x==p.x) ///这里略坑
{
x0 = p.x;
}
else
{
k = (t2.y- p.y)/(t2.x - p.x);
B = t2.y-k*t2.x;
x0 = (y-B)/k;
}
}
else
{
x = t2.x;
if(t1.x==p.x)
{
x0 = p.x;
}
else
{
k = (t1.y- p.y)/(t1.x - p.x);
B = t1.y-k*t1.x;
x0 = (y-B)/k;
} }
double l = fabs(x-x0);
double h = fabs(y-p.y);
printf("%.2lf\n",l*h/);
continue;
}
printf("0.00\n");
}
return ;
}
poj 2826(好坑,线段相交问题)的更多相关文章
- POJ 1066 Treasure Hunt(线段相交判断)
Treasure Hunt Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4797 Accepted: 1998 Des ...
- POJ 2653 Pick-up sticks(线段相交)
题意:给定n个木棍依次放下,要求最终判断没被覆盖的木棍是哪些. 思路:快速排斥以及跨立实验可以判断线段相交. #include<algorithm> #include<cstdio& ...
- poj 3304(直线与线段相交)
传送门:Segments 题意:线段在一个直线上的摄影相交 求求是否存在一条直线,使所有线段到这条直线的投影至少有一个交点 分析:可以在共同投影处作原直线的垂线,则该垂线与所有线段都相交<==& ...
- [poj 1127]Jack Straws[线段相交][并查集]
题意: 给出一系列线段,判断某两个线段是否连通. 思路: 根据线段相交情况建立并查集, 在同一并查集中则连通. (第一反应是强连通分量...实际上只要判断共存即可, 具体的方向啊是没有关系的..) 并 ...
- POJ 2653 Pick-up sticks [线段相交 迷之暴力]
Pick-up sticks Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 12861 Accepted: 4847 D ...
- POJ 1066--Treasure Hunt(判断线段相交)
Treasure Hunt Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7857 Accepted: 3247 Des ...
- POJ 1127 Jack Straws (线段相交)
题意:给定一堆线段,然后有询问,问这两个线段是不是相交,并且如果间接相交也可以. 析:可以用并查集和线段相交来做,也可以用Floyd来做,相交就是一个模板题. 代码如下: #pragma commen ...
- TTTTTTTTTTTTTT poj 1127 Jack Straws 线段相交+并查集
题意: 有n个木棍,给出木棍的两个端点的x,y坐标,判断其中某两个线段是否连通(可通过其他线段连通) #include <iostream> #include <cstdio> ...
- POJ 1039 直线和线段相交
题意: 题意很好理解,从左边射过来的光线,最远能经过管道到右边多少距离. 分析: 光线一定经过一个上端点和一个下端点,这一点很容易想到.然后枚举上下端点即可 #include <iostream ...
随机推荐
- lintcode-86-二叉查找树迭代器
86-二叉查找树迭代器 设计实现一个带有下列属性的二叉查找树的迭代器: 元素按照递增的顺序被访问(比如中序遍历) next()和hasNext()的询问操作要求均摊时间复杂度是O(1) 样例 对于下列 ...
- webstorm-前端javascript开发神器中文教程和技巧分享(转)
webstorm是一款前端javascript开发编辑的神器,此文介绍webstorm的中文教程和技巧分享. webstorm8.0.3中文汉化版下载: 百度网盘下载:http://pan.baidu ...
- Intellij IDEA将工程打包成jar包并执行
打开File -> Project Structure -> Artifacts 点击“+”,选择“Jar”,选择Empty或From modules with dependencies, ...
- kudu介绍及安装配置
kudu介绍及安装配置 介绍 Kudu 是一个针对 Apache Hadoop 平台而开发的列式存储管理器.Kudu 共享 Hadoop 生态系统应用的常见技术特性: 它在 commodity har ...
- [bzoj5321] [Jxoi2017]加法
Description 可怜有一个长度为 n 的正整数序列 A,但是她觉得 A 中的数字太小了,这让她很不开心. 于是她选择了 m 个区间 [li, ri] 和两个正整数 a, k.她打算从这 m 个 ...
- MySQL之数据库及表的修改和删除
本文章来自实验楼的操作过程和其中相应地解释.(博客园不知道怎么回事,上传图片总是失败.) 一.对数据库修改 1)删除数据库的命令为:DROP DATABASE 数据名; 二.对表的修改 1)重命名一张 ...
- underscore的bind和bindAll方法
bind方法和bindAll方法都是用来设定函数的this值的,区别是调用方式不同. var xiaoming = { say:function(){ console.log('I am xiaomi ...
- 【BZOJ 1407】[Noi2002]Savage ExGCD
我bitset+二分未遂后就来用ExGCD了,然而这道题的时间复杂度还真是玄学...... 我们枚举m然后对每一对用ExGCD判解,我们只要满足在最小的一方死亡之前无解就可以了,对于怎么用,就是ax+ ...
- 收藏一个漂亮的Flash焦点图切换
网上闲逛的时候发现一个Flash焦点图效果,跟喜欢,然后就下载回来,收集在这里,以便以后方便取用.这个Flash使用方法也是相当简单的,如果你喜欢,也可以从这里查看源代码下载. Flash 焦点图效果 ...
- [lucene系列笔记2]在eclipse里初步使用lucene的索引和查询功能
首先,new一个java project,名字叫做LuceneTools. 然后,在project里new一个class,名字叫做IndexFiles.这个类用来给文件建索引(建好索引以后就可以高效检 ...