This article is made by Jason-Cow.
Welcome to reprint.
But please post the writer's address.

http://www.cnblogs.com/JasonCow/

LA2218 && vijos1087铁人三项

描述

所有运动员的3个项目的速度都是已知的。裁判可以任意规定每一个项目的路程长度,并且每个项目的长度均为正数。

正因为裁判拥有如此大的权力,所以有些运动员会贿赂裁判,让他规定对自己有利的各项目的路程长度,而使自己获得第一名。但并非每个人都有这样的机 会。有些运动员因为实力实在太差,以致无论裁判规定怎样的长度,都无法获得第一名。现在请你来判断,每一位运动员是否有可能通过贿赂裁判获得第一名(不能 是并列第一)。

格式

输入格式

首行为运动员的人数N (1<=N<=100),以下N行,每行含3个整数,Vi,Ui和Wi(1<=Vi,Ui,Wi<=10000),用空格隔开,表示各人3个项目的速度。

输出格式

对于每个运动员,输出一行,如果他能通过贿赂裁判获得第一名,则输出“Yes”,否则输出“No”。

样例

样例输入

  1.  

样例输出

  1. Yes
  2. Yes
  3. Yes
  4. No
  5. No
  6. No
  7. Yes
  8. No
  9. Yes

一眼简单线性规划嘛!谁看不出来?!数学必修5

推方程。Let go!

设总长为‘1’,三短距离分别为  x , y , (1-x-y)

i战胜j:

  

  

  

注意精度的问题(对a/b  和 a/c  若|b|>|c| 则a/b优于a/c???):

  1. D P;
  2. if(fabs(A)>fabs(B))P=D(-C/A,);
  3. else P=D(,-C/B);
  4. l[++cnt]=L(P,V(B,-A));//Ax+By+C>0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <vector>
  7. #include <cmath>
  8. #include <queue>
  9. #include <map>
  10. #include <set>
  11. using namespace std;
  12. #define sqr(x) ((x)*(x))
  13. #define RG register
  14. #define op operator
  15. #define IL inline
  16. typedef double db;
  17. typedef bool bl;
  18. const db pi=acos(-1.0),eps=1e-;
  19. struct D{
  20. db x,y;
  21. D(db x=0.0,db y=0.0):x(x),y(y){}
  22. };
  23. typedef D V;
  24. bl operator<(D A,D B){return A.x<B.x||(A.x==B.x&&A.y<B.y);}
  25. V operator+(V A,V B){return V(A.x+B.x,A.y+B.y);}
  26. V operator-(V A,V B){return V(A.x-B.x,A.y-B.y);}
  27. V operator*(V A,db N){return V(A.x*N,A.y*N);}
  28. V operator/(V A,db N){return V(A.x/N,A.y/N);}
  29.  
  30. db dcmp(db x){if(fabs(x)<eps)return ;return x<?-:;}
  31. db Ang(db x){return(x*180.0/pi);}
  32. db Rad(db x){return(x*pi/180.0);}
  33. V Rotate(V A,db a){return V(A.x*cos(a)-A.y*sin(a),A.x*sin(a)+A.y*cos(a));}
  34. db Dis(D A,D B){return sqrt(sqr(A.x-B.x)+sqr(A.y-B.y));}
  35. db Cross(V A,V B){return A.x*B.y-A.y*B.x;}
  36.  
  37. struct L{
  38. D P,v;db a;
  39. L(){}
  40. L(D P,V v):P(P),v(v){a=atan2(v.y,v.x);}
  41. bl operator<(const L x)const{return a<x.a;}
  42. };
  43.  
  44. D Intersect(L a,L b){
  45. V u=a.P-b.P;
  46. return a.P+a.v*(Cross(b.v,u)/Cross(a.v,b.v));
  47. }
  48.  
  49. bl Left(L l,D A){return Cross(l.v,A-l.P)>;}
  50.  
  51. int HPI(L*l,int n,D*ans){
  52. int head,tail,m=;D*P=new D[n];L*q=new L[n];
  53. sort(l+,l+n+),q[head=tail=]=l[];
  54. for(int i=;i<=n;i++){
  55. while(head<tail && !Left(l[i],P[tail-]))tail--;
  56. while(head<tail && !Left(l[i],P[head])) head++;
  57. q[++tail]=l[i];
  58. if(fabs(Cross(q[tail].v,q[tail-].v))<eps){
  59. tail--;
  60. if(Left(q[tail],l[i].P))q[tail]=l[i];
  61. }
  62. if(head<tail)P[tail-]=Intersect(q[tail-],q[tail]);
  63. }
  64. while(head<tail && !Left(q[head],P[tail-]))tail--;
  65. if(tail-head<=)return ;
  66. P[tail]=Intersect(q[tail],q[head]);
  67. for(int i=head;i<=tail;i++)ans[++m]=P[i];
  68. return m;
  69. }
  70.  
  71. const int maxn=+;
  72. const db K=;//解决精度问题,技巧1
  73. int n;L l[maxn];D A[maxn];
  74. int u[maxn],v[maxn],w[maxn];
  75. db a[maxn],b[maxn],c[maxn];
  76.  
  77. int main(){
  78. while(scanf("%d",&n)!=EOF&&n){
  79. for(int i=;i<=n;i++)scanf("%d%d%d",&v[i],&u[i],&w[i]);
  80. for(int i=;i<=n;i++)a[i]=K/v[i]-K/w[i],b[i]=K/u[i]-K/w[i],c[i]=K/w[i];
  81. for(int i=;i<=n;i++){
  82. int ok=true,cnt=;
  83. for(int j=;j<=n;j++){
  84. if(i==j)continue;
  85. if(v[i]<=v[j] && u[i]<=u[j] && w[i]<=w[j]){ok=;break;}
  86. if(v[i]> v[j] && u[i]> u[j] && w[i]> w[j])continue;
  87. db A=a[j]-a[i],B=b[j]-b[i],C=c[j]-c[i];
  88. D P;//解决精度问题,技巧2
  89. if(fabs(A)>fabs(B))P=D(-C/A,);
  90. else P=D(,-C/B);
  91. l[++cnt]=L(P,V(B,-A));//Ax+By+C>0
  92. }
  93. if(ok){//x>0 y>0 1-x-y>0
  94. l[++cnt]=L(D(,),V(,-));
  95. l[++cnt]=L(D(,),V(,));
  96. l[++cnt]=L(D(,),V(-,));
  97. ok=HPI(l,cnt,A)?true:false;
  98. }
  99. printf("%s\n",ok?"Yes":"No");
  100. }
  101. }
  102. return ;
  103. }

计算几何-LA2218-HPI-第一次卡精度-vijos1087-铁人三项的更多相关文章

  1. 网站SEO之百度优化不得不知的铁人三项规则

    奥运会有铁人三项,此运动更好的协调了运动员的综合素质水平,而百度优化排名中的“铁人三项”规则则是让网站的整体质量更好的满足市场用户体验.针对不同部分的操作,可以让网站在每个细节处都能凸显以人为本的服务 ...

  2. Phaser铁人三项

    /** * 模拟铁人三项 */ public class PhaserTest { private static Random random = new Random(System.currentTi ...

  3. 铁人三项(第五赛区)_2018_seven

    铁人三项(第五赛区)_2018_seven 先来看看保护 保护全开,IDA分析 首先申请了mmap两个随机地址的空间,一个为rwx,一个为rw 读入的都shellcode长度小于等于7,且这7个字符不 ...

  4. [BUUCTF]PWN——铁人三项(第五赛区)_2018_rop

    铁人三项(第五赛区)_2018_rop[32位libc泄露] 题目附件 解题步骤: 例行检查,32位,开启了NX保护 试运行一下程序,一开始让我们输入,然后直接输出"Hellow,world ...

  5. 2020信息安全铁人三项 pwn复盘

    第一赛区 hacknote 程序存在格式化字符串漏洞和uaf,不多说了,很简单. 1 from pwn import * 2 3 p = process('./hacknote') 4 elf = E ...

  6. 2018铁人三项测评题 IOS99

    下面这一部分是我从网上复制过来的, 2.IOS 解题链接:http://ctf4.shiyanbar.com/web/IOS/index.php 这题页面中提示系统升级到了IOS99,我们可以想到修改 ...

  7. 铁人三项(第五赛区)_2018_rop

    拿到程序依旧老样子checksec和file一下 可以看到是32位的程序开启了nx保护,将程序放入ida进行查看 shift+f12 看到没有system和binsh等字样,考虑用泄露libc来做这道 ...

  8. 51nod 1172 Partial Sums V2 卡精度的任意模数FFT

    卡精度的任意模数fft模板题……这道题随便写个表就能看出规律来(或者说考虑一下实际意义),反正拿到这题之后,很快就会发现他是任意模数fft模板题.然后我就去网上抄了一下板子……我打的是最土的任意模数f ...

  9. 【TOJ 3005】Triangle(判断点是否在三角形内+卡精度)

    描述 Given the coordinates of the vertices of a triangle,And a point. You just need to judge whether t ...

随机推荐

  1. 栈和队列----最大值减去最小值小于等于num的子数组的数量

    最大值减去最小值小于等于num的子数组的数量 给定数组arr和整数 num,共返回有多少个数组满足下列情况: max(arr[i..j])-min(arr[i..j])<=num.其中max(a ...

  2. 《深入理解java虚拟机》读书笔记八——第九章

    第九章 类加载及执行子系统的案例与实战 Q:如果有10个WEB应用程序都是用Spring来进行组织管理的话,可以把Spring放到Common或Shared目录下(Tomcat5.0)让这些程序共享. ...

  3. 四种webAPP横向滑动模式图解—H5页面开发

    一.容器整体滑动(DEMO只演示A-B-C-B,下同) 模拟动画效果见下图(上),滑动分解见下图(下): DEMO地址:http://nirvana.sinaapp.com/demo_slider/s ...

  4. JUC-JUC是什么?

    一.JUC是什么? java.util.concurrent在并发编程中使用的工具类 进程/线程回顾 1.进程/线程是什么? 进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动.它是 ...

  5. mybatis(三):框架结构

  6. 关于wget安装mysql的过程

    鄙人才疏学浅,写此文章是为了帮助我那些刚入门的朋友一点心意 第一步  安装yum源 安装mysql的yum源:wget https://dev.mysql.com/get/mysql80-commun ...

  7. Python入门6 —— 流程控制 - if判断

    代码块: 1.代码块指的是同一级别的代码,在python中用缩进相同的空格数(除了顶级代码块无任何缩进之外,其余代码块都是在原有的基础上缩进4个空格)来标识同一级的代码块 2.同一级别的代码块会按照自 ...

  8. Docker(一)概念与基础

    Docker 基础 为什么需要docker?在传统部署下,我们会遇到不同机器.不同依赖版本的兼容性等问题,解决此问题一般会消耗大量时间,并且在不同机器上均要执行统一环境的部署也是一个耗时较长的工作.除 ...

  9. 基于alpine的php-fpm扩展swoole和pdo_mysql

    vim Dockerfile 插入一下内容 FROM php:fpm-alpine RUN echo http://mirrors.aliyun.com/alpine/v3.10/main>/e ...

  10. 在CentOS上通过Docker方式安装Redis

    在CentOS上通过Docker方式安装Redis 首先保证已经安装docker. 拖拽redis镜像 docker pull redis 启动redis docker run -p 6379:637 ...