牛客网暑期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 ...
随机推荐
- C++语言基础——01一切的开始
环境准备 集成开发环境(Integrated Development Environment,IDE) 竞赛中最常见的是Dev-C++,平时练习采用其他IDE也可,使用方法都是类似的. 编译器 推荐使 ...
- 上班从换一张桌面壁纸开始——开源小工具Bing每日壁纸
发布一个自用的开源小软件,Bing每日壁纸,使用c# winform开发.该小软件可以自动获取Bing的精美图片设置为壁纸,并且支持随机切换历史壁纸,查看壁纸故事. 功能特性 自动获取Bing最新图片 ...
- strings包
http://docscn.studygolang.com/pkg/strings/ Golang官方对strings包的介绍,strings包都是关于字符串的操作 常用的函数: 判断s1中是否包含字 ...
- Java 设置Excel条件格式(高亮条件值、应用单元格值/公式/数据条等类型)
概述 在Excel中,应用条件格式功能可以在很大程度上改进表格的设计和可读性,用户可以指定单个或者多个单元格区域应用一种或者多种条件格式.本篇文章,将通过Java程序示例介绍条件格式的设置方法,设置条 ...
- Spring Boot 应用使用spring session+redis启用分布式session后,如何在配置文件里设置应用的cookiename、session超时时间、redis存储的namespace
现状 项目在使用Spring Cloud搭建微服务框架,其中分布式session采用spring session+redis 模式 需求 希望可以在配置文件(application.yml)里设置应用 ...
- Ubuntu_Gedit配置
Ubuntu_Gedit配置 为了换Ubuntu的时候能够更加方便,不用再用手重新打一遍代码,丢几个Gedit配置-- External Tools gdb compile (F2) #!/bin/s ...
- innodb日志文件大小
innodb是用多个文件作为一组循环日志,通常不需要修改默认的日志数量,只修改每个日志文件的大小即可,要修改日志文件大小,需要完全关闭mysql,将旧的日志文件移到其他地方保存,重新配置参数,然后重启 ...
- 【Oracle】delete表后commit后怎么找回,方法
有些时候,不小心删除了一些需要的表,而且数据库不能停止,只能一直运行下去,这样的话很麻烦 下面介绍的方法就是删除表后通过时间戳后者scn找回删除的数据 模拟实验环境: 创建一个新表 SQL> c ...
- Mybatis执行流程学习之手写mybatis雏形
Mybatis是目前开发中最常用的一款基于ORM思想的半自动持久层框架,平时我们都仅仅停留在使用阶段,对mybatis是怎样运行的并不清楚,今天抽空找到一些资料自学了一波,自己写了一个mybatis的 ...
- 在HTML中改变input标签中的内容
在HTML中改变input标签的内容 1.使用js自带的方法: document.getElementById('roadName').value='武汉路';//通过标签选择器来选择标签,然后设置值 ...