计算几何-LA2218-HPI-第一次卡精度-vijos1087-铁人三项
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”。
样例
样例输入
样例输出
Yes
Yes
Yes
No
No
No
Yes
No
Yes
一眼简单线性规划嘛!谁看不出来?!数学必修5
推方程。Let go!
设总长为‘1’,三短距离分别为 x , y , (1-x-y)
i战胜j:
注意精度的问题(对a/b 和 a/c 若|b|>|c| 则a/b优于a/c???):
D P;
if(fabs(A)>fabs(B))P=D(-C/A,);
else P=D(,-C/B);
l[++cnt]=L(P,V(B,-A));//Ax+By+C>0
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <cmath>
#include <queue>
#include <map>
#include <set>
using namespace std;
#define sqr(x) ((x)*(x))
#define RG register
#define op operator
#define IL inline
typedef double db;
typedef bool bl;
const db pi=acos(-1.0),eps=1e-;
struct D{
db x,y;
D(db x=0.0,db y=0.0):x(x),y(y){}
};
typedef D V;
bl operator<(D A,D B){return A.x<B.x||(A.x==B.x&&A.y<B.y);}
V operator+(V A,V B){return V(A.x+B.x,A.y+B.y);}
V operator-(V A,V B){return V(A.x-B.x,A.y-B.y);}
V operator*(V A,db N){return V(A.x*N,A.y*N);}
V operator/(V A,db N){return V(A.x/N,A.y/N);} db dcmp(db x){if(fabs(x)<eps)return ;return x<?-:;}
db Ang(db x){return(x*180.0/pi);}
db Rad(db x){return(x*pi/180.0);}
V Rotate(V A,db a){return V(A.x*cos(a)-A.y*sin(a),A.x*sin(a)+A.y*cos(a));}
db Dis(D A,D B){return sqrt(sqr(A.x-B.x)+sqr(A.y-B.y));}
db Cross(V A,V B){return A.x*B.y-A.y*B.x;} struct L{
D P,v;db a;
L(){}
L(D P,V v):P(P),v(v){a=atan2(v.y,v.x);}
bl operator<(const L x)const{return a<x.a;}
}; D Intersect(L a,L b){
V u=a.P-b.P;
return a.P+a.v*(Cross(b.v,u)/Cross(a.v,b.v));
} bl Left(L l,D A){return Cross(l.v,A-l.P)>;} int HPI(L*l,int n,D*ans){
int head,tail,m=;D*P=new D[n];L*q=new L[n];
sort(l+,l+n+),q[head=tail=]=l[];
for(int i=;i<=n;i++){
while(head<tail && !Left(l[i],P[tail-]))tail--;
while(head<tail && !Left(l[i],P[head])) head++;
q[++tail]=l[i];
if(fabs(Cross(q[tail].v,q[tail-].v))<eps){
tail--;
if(Left(q[tail],l[i].P))q[tail]=l[i];
}
if(head<tail)P[tail-]=Intersect(q[tail-],q[tail]);
}
while(head<tail && !Left(q[head],P[tail-]))tail--;
if(tail-head<=)return ;
P[tail]=Intersect(q[tail],q[head]);
for(int i=head;i<=tail;i++)ans[++m]=P[i];
return m;
} const int maxn=+;
const db K=;//解决精度问题,技巧1
int n;L l[maxn];D A[maxn];
int u[maxn],v[maxn],w[maxn];
db a[maxn],b[maxn],c[maxn]; int main(){
while(scanf("%d",&n)!=EOF&&n){
for(int i=;i<=n;i++)scanf("%d%d%d",&v[i],&u[i],&w[i]);
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];
for(int i=;i<=n;i++){
int ok=true,cnt=;
for(int j=;j<=n;j++){
if(i==j)continue;
if(v[i]<=v[j] && u[i]<=u[j] && w[i]<=w[j]){ok=;break;}
if(v[i]> v[j] && u[i]> u[j] && w[i]> w[j])continue;
db A=a[j]-a[i],B=b[j]-b[i],C=c[j]-c[i];
D P;//解决精度问题,技巧2
if(fabs(A)>fabs(B))P=D(-C/A,);
else P=D(,-C/B);
l[++cnt]=L(P,V(B,-A));//Ax+By+C>0
}
if(ok){//x>0 y>0 1-x-y>0
l[++cnt]=L(D(,),V(,-));
l[++cnt]=L(D(,),V(,));
l[++cnt]=L(D(,),V(-,));
ok=HPI(l,cnt,A)?true:false;
}
printf("%s\n",ok?"Yes":"No");
}
}
return ;
}
计算几何-LA2218-HPI-第一次卡精度-vijos1087-铁人三项的更多相关文章
- 网站SEO之百度优化不得不知的铁人三项规则
奥运会有铁人三项,此运动更好的协调了运动员的综合素质水平,而百度优化排名中的“铁人三项”规则则是让网站的整体质量更好的满足市场用户体验.针对不同部分的操作,可以让网站在每个细节处都能凸显以人为本的服务 ...
- Phaser铁人三项
/** * 模拟铁人三项 */ public class PhaserTest { private static Random random = new Random(System.currentTi ...
- 铁人三项(第五赛区)_2018_seven
铁人三项(第五赛区)_2018_seven 先来看看保护 保护全开,IDA分析 首先申请了mmap两个随机地址的空间,一个为rwx,一个为rw 读入的都shellcode长度小于等于7,且这7个字符不 ...
- [BUUCTF]PWN——铁人三项(第五赛区)_2018_rop
铁人三项(第五赛区)_2018_rop[32位libc泄露] 题目附件 解题步骤: 例行检查,32位,开启了NX保护 试运行一下程序,一开始让我们输入,然后直接输出"Hellow,world ...
- 2020信息安全铁人三项 pwn复盘
第一赛区 hacknote 程序存在格式化字符串漏洞和uaf,不多说了,很简单. 1 from pwn import * 2 3 p = process('./hacknote') 4 elf = E ...
- 2018铁人三项测评题 IOS99
下面这一部分是我从网上复制过来的, 2.IOS 解题链接:http://ctf4.shiyanbar.com/web/IOS/index.php 这题页面中提示系统升级到了IOS99,我们可以想到修改 ...
- 铁人三项(第五赛区)_2018_rop
拿到程序依旧老样子checksec和file一下 可以看到是32位的程序开启了nx保护,将程序放入ida进行查看 shift+f12 看到没有system和binsh等字样,考虑用泄露libc来做这道 ...
- 51nod 1172 Partial Sums V2 卡精度的任意模数FFT
卡精度的任意模数fft模板题……这道题随便写个表就能看出规律来(或者说考虑一下实际意义),反正拿到这题之后,很快就会发现他是任意模数fft模板题.然后我就去网上抄了一下板子……我打的是最土的任意模数f ...
- 【TOJ 3005】Triangle(判断点是否在三角形内+卡精度)
描述 Given the coordinates of the vertices of a triangle,And a point. You just need to judge whether t ...
随机推荐
- 消息队列和Kafka
------20191211闪
- VMware vSphere Client
复制虚拟机 在虚拟机关机状态下,选中一个虚拟机,文件 - 导出 - 导出OVF模板,导出成功后,再文件 - 部署OVF模板(修改IP.MAC.主机名称)
- Selenium自动化发送163邮箱
自动化发送163邮件 方法一: import time import datetime from selenium import webdriver from selenium.webdriver.s ...
- doctype的意思
<!DOCTYPE HTML>这句话在整个网页的最上头,意思是这个网页是一个用html5语法写的,因为还有html4和xhtml等语法. 为了兼容一些旧的页面,浏览器设置了两种解析模式:1 ...
- Map merge
将新的值赋值给map(如果不存在)或更新具有给定key的现有值. Map<Integer, Integer> map = new HashMap<>(); for (Integ ...
- batchsize用法 以及实现前向运算的矩阵乘法方式
batchsize用法 以及实现前向运算的矩阵乘法方式 待办 使用batchsize可以把矩阵缩小,采用矩阵乘法的形式可以一次计算多个经过神经网络的结果,然后通过交叉熵进行计算总的损失得到结果. 所以 ...
- eslint全局变量报错 xxx is not defined
找到.eslintrc.js,添加 "globals": { "你的全局变量": true }, 如果globals已经存在在里边加入你要忽略检测的全局变量即可 ...
- 一点点学习PS--实战二
本节实战,可以学到如何制作gif动图,制作搜狗输入法皮肤 1.工具使用 (1)滤镜--液化--膨胀:这里是制作出猫咪打呼时肚子和气泡胀大的效果 (2)图像--画布大小:可裁剪画布到指定像素,并且裁剪指 ...
- 生成器和迭代器_python
一.生成器简介(generator) 在进行较大数据的存储,如果直接存储在列表之中,则会可能造成内存的不够与速度的减慢,因为列表创建完是立即创建并存在的,而在python中生成器(generator) ...
- linux命令 mv
后缀--backup=<备份模式>:若需覆盖文件,则覆盖前先行备份: -b:当文件存在时,覆盖前,为其创建一个备份: -f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目 ...