POJ 1755 判断线性区域是否存在可行区域
来源:互联网 发布:linux查询端口命令 编辑:程序博客网 时间:2024/06/06 14:16
题意 : 给你每个人在每一段的速度,让你求出是否存在一种路程的安排使得这个人可以赢得这场比赛
题解 :可以去列方程组,然后发现是一个三维的变元,但是发现有一个变元,可以除过去就成了一个二元方程就是一个二维平面然后判断一个线性方程式组是否存在可行域.
发一个求线性区域的可行区域的模版
#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>#include <cmath>using namespace std;const double eps = 1e-16;const double inf = 1e9 + 5;const int maxn = 1505;struct Point{ double x,y;}p[maxn],tp[maxn],q[maxn];struct Node{ double u,v,w;}z[maxn];double ab (double x) {return x > 0 ? x : -x;}double xmul(Point p0,Point p1,Point p2){ return (p1.x-p0.x)*(p2.y-p0.y)-(p1.y-p0.y)*(p2.x-p0.x);}Point Intersection(Point p1,Point p2,double a,double b,double c){ double u = ab(a*p1.x+b*p1.y+c); double v = ab(a*p2.x+b*p2.y+c); Point t; t.x=(p1.x*v+p2.x*u)/(u+v);t.y=(p1.y*v+p2.y*u)/(u+v); return t;}double Get_area(Point p[],int n){ double area=0; for(int i=2;i<n;i++) area+=xmul(p[1],p[i],p[i+1]); return -area/2.0;}void Cut(double a,double b,double c,Point p[],int &cnt){ int tmp=0; for (int i=1;i <= cnt;i++){ if(a*p[i].x+b*p[i].y+c>-eps) tp[++tmp]=p[i]; else{ if(a*p[i-1].x+b*p[i-1].y+c>eps) tp[++tmp]=Intersection(p[i-1],p[i],a,b,c); if(a*p[i+1].x+b*p[i+1].y+c>eps) tp[++tmp]=Intersection(p[i],p[i+1],a,b,c); } } for(int i=1;i<=tmp;i++) p[i]=tp[i]; p[0]=p[tmp];p[tmp+1]=p[1]; cnt=tmp;}int slove(int n,int idx) { p[1].x=0;p[1].y=0; p[2].x=0;p[2].y=inf; p[3].x=inf;p[3].y=inf; p[4].x=inf;p[4].y=0; p[0]=p[4];p[5]=p[1]; int cnt=4; for(int i=0;i<n;i++){ if(i==idx) continue; double a,b,c; a=(z[idx].u-z[i].u)/(z[idx].u*z[i].u); b=(z[idx].v-z[i].v)/(z[idx].v*z[i].v); c=(z[idx].w-z[i].w)/(z[idx].w*z[i].w); if(a==0 && b==0&&c<eps) return 0; Cut(a,b,c,p,cnt); } return ab (Get_area(p, cnt)) >= eps;}int main(){ int n; while(scanf("%d",&n)!=EOF){ for(int i=0;i<n;i++) scanf("%lf%lf%lf",&z[i].u,&z[i].v,&z[i].w); for(int i=0;i<n;i++) puts(slove(n,i)?"Yes":"No"); } return 0;}
阅读全文
0 0
- POJ 1755 判断线性区域是否存在可行区域
- poj 2540 Hotter Colder(线性规划可行区域)
- POJ 2540 半平面交求可行区域面积
- 判断点是否在不规则区域范围内
- 判断点是否在封闭区域里面
- 判断某一区域是否为空
- 判断点是否在多边形区域里面
- 判断区域B是否在区域A内部的快速算法
- 判断区域B是否在区域A内部的快速算法
- 使用CRgn::CombineRgn判断两个区域是否有共同的覆盖区域
- VRTK 可行走区域块的实现
- 体会setCapture和releaseCapture判断鼠标是否在某一区域
- PostGis 如何判断两个多边形是否有重叠的区域
- 判断两个矩形是否相交,相交区域面积
- jQuery判断点击事件是否在目标区域
- iOS开发-判断一个点是否在某个区域
- iOS开发-判断一个点是否在某个区域
- cocos2dx 3.x判断node点击区域是否透明
- sublime text 3在windows中配置ctags插件
- 设置pg数据库外界可访问
- input只读模式
- deeplearn.js入门(二)
- Object::connect: No such slot (QT槽丢失问题)
- POJ 1755 判断线性区域是否存在可行区域
- 单列模式总结(结合Android源码分析)
- Keras学习笔记----三(编译 训练 例子)
- 2.java编程实现压缩文法的等价变化--加标记算法
- 九九乘法表
- SourceTree 免登陆操作
- 第二部分Linux 文件、目录与磁盘格式笔记(未完全,待续 缺少磁盘分区部分的练习)
- 妈耶,搞了半天原来pycharm整体字体太小了应该这样设置。。
- Java中的日期Date