[洛谷P1766]液体滴落
来源:互联网 发布:mac本和win本 编辑:程序博客网 时间:2024/04/28 20:49
题目←
首先需明确题目中“不受影响”的含义
出现两条相交线段的话,液体的运行轨迹应该是这样的:
于是发现只需要确定液体从一条线段上落下来后首先落到哪条线段上就可以确定下一个落点了……
然后?按每条线段较低端点的降序排列->保证液体不会落到之前的线段上;
然后模拟就可以了
注意细节
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int MAXN = 100000 + 50;struct edge{ double x1,y1,x2,y2; double k,b;}l[MAXN];int n;double s;bool cmp(edge a,edge b){ return min(a.y1,a.y2) > min(b.y1,b.y2);}int p = 1;bool in(int num,int pos){ if(l[num].x1 < pos && l[num].x2 > pos)return true; return false;}double pre;int main(){ scanf("%d%lf",&n,&s); for(int i = 1;i <= n;i ++){ scanf("%lf%lf%lf%lf",&l[i].x1,&l[i].y1,&l[i].x2,&l[i].y2); if(l[i].x1 > l[i].x2){ swap(l[i].x1,l[i].x2); swap(l[i].y1,l[i].y2); } l[i].k = (l[i].y2 - l[i].y1)/(l[i].x2 - l[i].x1); l[i].b = l[i].y2 - l[i].k*l[i].x2; } sort(l + 1,l + n + 1,cmp); pre = 2147483647; while(p <= n){ while((!in(p,s) || l[p].k*s + l[p].b >= pre) && p <= n) p ++; if(p > n)break; double h = l[p].k*s + l[p].b; for(int i = p + 1;i <= n;i ++){ if(in(i,s)){ if(l[i].k*s + l[i].b > h && l[i].k*s + l[i].b < pre){// h = l[i].k*s + l[i].b; p = i; } } } s = l[p].y1 < l[p].y2 ? l[p].x1:l[p].x2; pre = l[p].y1 < l[p].y2 ? l[p].y1:l[p].y2; p ++; } int ans = s; printf("%d",ans); return 0;}
今后还是多在洛谷刷题吧
毕竟有AC数这个东西……避免把代码一糊就往上交Orz
阅读全文
0 0
- [洛谷P1766]液体滴落
- 洛谷 1766 液体滴落(坑) 模拟
- luogu 1766 液体滴落
- 液体酒
- 液体健康
- 液体包装机
- 1360 神奇的液体
- foj1081等分液体
- 小白鼠检测液体
- 全氢聚硅氮烷液体涂料材料
- 微分方程之液体冷却
- [Unity]液体物理
- 女人用液体征服男人
- 你知道液体活性碳吗?
- 基于物理的液体模拟
- c语言解 等分液体
- 有机硅液体消泡剂详细介绍
- 色样液体火箭然而婚姻家庭
- 用SSH来开发用户模块
- 洛谷 1092 虫食算 (dfs+剪枝)
- Caused by: java.lang.ClassNotFoundException: weblogic.utils.NestedException
- Android Activity / Fragment内存泄露引论
- java 查找两个字符串的最长公共子串
- [洛谷P1766]液体滴落
- 异常----RuntimeException与其他的一些区别以及throw与throws的区别
- vs2013 MFC 静态控件字体调整
- 有用网站收藏夹
- 第1060期AI100_机器学习日报(2017-08-13)
- 第1057期AI100_机器学习日报(2017-08-10)
- 第1061期AI100_机器学习日报(2017-08-14)
- ToolBar
- 第1056期机器学习日报(2017-08-09)