牛客网暑期ACM多校训练营(第二场)message
传送门:https://ac.nowcoder.com/acm/problem/16631
题意
题解
代码
1 #include<bits/stdc++.h>
2 #define ll long long
3 #define eps 1e-10
4 using namespace std;
5
6 const ll maxn=1e5+10;
7
8 struct node
9 {
10 double x,y;
11 ll id;
12 }p[maxn],s[maxn];
13
14 double ans[maxn];
15
16 double cross(node a,node b,node c)
17 {
18 return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
19 }
20
21 ll dcmp(double x)
22 {
23 return fabs(x)<eps?0:x<0?-1:1;
24 }
25
26 bool operator <(node p1,node p2)
27 {
28 return dcmp(p1.x-p2.x)<0||(dcmp(p1.x-p2.x)==0&&dcmp(p1.y-p2.y)<0);
29 }
30
31 int main()
32 {
33 ios::sync_with_stdio(false);
34 cin.tie(0);
35 cout.tie(0);
36 ll n;
37 cin>>n;
38 for(ll i=0;i<n;i++){
39 cin>>p[i].x>>p[i].y;
40 }
41 ll m;
42 cin>>m;
43 for(ll i=n;i<n+m;i++) cin>>p[i].x>>p[i].y,p[i].id=i;
44 for(ll i=0;i<n+m;i++) p[i].x=-p[i].x;
45 sort(p,p+n+m);
46 ll top=0;
47 for(ll i=0;i<n+m;i++){
48 if(p[i].id){
49 if(!top) continue;
50 ll l=1,r=top;
51 while(l<r){
52 ll mid=l+r>>1;
53 if(cross(s[mid],s[mid+1],p[i])<=0) r=mid;
54 else l=mid+1;
55 }
56 ans[p[i].id]=max(ans[p[i].id],(p[i].y-s[l].y)/(p[i].x-s[l].x));
57 }
58 else{
59 while(top>1&&dcmp(cross(s[top-1],s[top],p[i]))<=0) top--;
60 //如果是向右转,这个中间点就不是我们要找的点
61 s[++top]=p[i];//如果是向左转,就加进来
62 }
63 }
64 reverse(p,p+n+m);
65 top=0;
66 for(ll i=0;i<n+m;i++){
67 if(p[i].id){
68 if(!top) continue;
69 ll l=1,r=top,pos=1;
70 while(l<r){
71 ll mid=l+r>>1;
72 if(cross(s[mid],s[mid+1],p[i])<=0) r=mid;
73 else l=mid+1;
74 }
75 ans[p[i].id]=max(ans[p[i].id],(p[i].y-s[l].y)/(p[i].x-s[l].x));
76 }
77 else{
78 while(top>1&&dcmp(cross(s[top-1],s[top],p[i]))<=0) top--;
79 //如果是向右转,这个中间点就不是我们要找的点
80 s[++top]=p[i];//如果是向左转,就加进来
81 }
82 }
83 for(ll i=n;i<m+n;i++){
84 if(dcmp(ans[i])<=0) cout<<"No cross"<<endl;
85 else cout<<setiosflags(ios::fixed)<<setprecision(15)<<ans[i]<<endl;
86 }
87 return 0;
88 }
牛客网暑期ACM多校训练营(第二场)message的更多相关文章
- 牛客网暑期ACM多校训练营 第九场
HPrefix Sum study from : https://blog.csdn.net/mitsuha_/article/details/81774727 k较小.分离x和k. 另外的可能:求a ...
- 牛客网暑期ACM多校训练营(第四场):A Ternary String(欧拉降幂)
链接:牛客网暑期ACM多校训练营(第四场):A Ternary String 题意:给出一段数列 s,只包含 0.1.2 三种数.每秒在每个 2 后面会插入一个 1 ,每个 1 后面会插入一个 0,之 ...
- 牛客网暑期ACM多校训练营(第五场):F - take
链接:牛客网暑期ACM多校训练营(第五场):F - take 题意: Kanade有n个盒子,第i个盒子有p [i]概率有一个d [i]大小的钻石. 起初,Kanade有一颗0号钻石.她将从第1到第n ...
- 牛客网 暑期ACM多校训练营(第二场)A.run-动态规划 or 递推?
牛客网暑期ACM多校训练营(第二场) 水博客. A.run 题意就是一个人一秒可以走1步或者跑K步,不能连续跑2秒,他从0开始移动,移动到[L,R]的某一点就可以结束.问一共有多少种移动的方式. 个人 ...
- 牛客网 暑期ACM多校训练营(第一场)A.Monotonic Matrix-矩阵转化为格子路径的非降路径计数,Lindström-Gessel-Viennot引理-组合数学
牛客网暑期ACM多校训练营(第一场) A.Monotonic Matrix 这个题就是给你一个n*m的矩阵,往里面填{0,1,2}这三种数,要求是Ai,j⩽Ai+1,j,Ai,j⩽Ai,j+1 ,问你 ...
- 牛客网暑期ACM多校训练营(第三场)H Diff-prime Pairs (贡献)
牛客网暑期ACM多校训练营(第三场)H Diff-prime Pairs (贡献) 链接:https://ac.nowcoder.com/acm/contest/141/H来源:牛客网 Eddy ha ...
- 2018牛客网暑期ACM多校训练营(第二场)I- car ( 思维)
2018牛客网暑期ACM多校训练营(第二场)I- car 链接:https://ac.nowcoder.com/acm/contest/140/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 ...
- 牛客网暑期ACM多校训练营(第七场)Bit Compression
链接:https://www.nowcoder.com/acm/contest/145/C 来源:牛客网 题目描述 A binary string s of length N = 2n is give ...
- 牛客网暑期ACM多校训练营(第一场) - J Different Integers(线段数组or莫队)
链接:https://www.nowcoder.com/acm/contest/139/J来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...
- 牛客网暑期ACM多校训练营(第九场) A题 FWT
链接:https://www.nowcoder.com/acm/contest/147/A来源:牛客网 Niuniu has recently learned how to use Gaussian ...
随机推荐
- 【排序】题解_P1093奖学金
题目描述 奖学金 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果两个同学总分相同,再按语文 ...
- STM32 HAL库之串口详细篇
一.基础认识 (一) 并行通信 原理:数据的各个位同时传输 优点:速度快 缺点:占用引脚资源多,通常工作时有多条数据线进行数据传输 8bit数据传输典型连接图: 传输的数据是二进制:11101010, ...
- 【JavaWeb】HTML&CSS 基础
HTML&CSS 基础 HTML 基础 HTML 标签 HTML标题:HTML 标题(Heading)是通过 h1 - h6 等标签进行定义的. HTML段落: HTML 段落是通过 p 标签 ...
- CAN总线采样点测试
采样点是什么? 采样点是接受节点判断信号逻辑的位置,CAN通讯属于异步通讯.需要通过不断的重新同步才能保证收发节点的采样准确. 若采样点太靠前,则因为线缆原因,DUT外发报文尚未稳定,容易发生采样错误 ...
- show engine innodb status
TRANSACTIONS------------Trx id counter 2003909(当前事务号)Purge done for trx's n:o < 2003905 (清理线程完成到了 ...
- 1 分钟上手,在容器中运行 Visual Studio Code
https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers 这个插件允许我们在容器中运 ...
- 使用modify修改内表
modify修改内表,有这样一种方式,MODIFY TABLE itab FROM wa [TRANSPORTING ..]. 然后这里的内表itab是有条件的,这个itab必须要有table key ...
- [CPP] STL 简介
STL 即标准模板库(Standard Template Library),是 C++ 标准库的一部分,里面包含了一些模板化的通用的数据结构和算法.STL 基于模版的实现,因此能够支持自定义的数据结构 ...
- 使用Azure Runbook 发送消息到Azure Storage Queue
客户需要定时发送信息到Azure Storage Queue,所以尝试使用Azure Runbook实现这个需求. 首先新增一个Azure Automation Account的资源. 因为要使用Az ...
- Netty之JAVA BIO模型
一.JAVA BIO模型 1.I/O模型 I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能 Java 共支持 3 种网络编程模型/IO 模式:BIO.NI ...