Codeforces gym102058 J. Rising Sun-简单的计算几何+二分 (2018-2019 XIX Open Cup, Grand Prix of Korea (Division 2))
1.0 s
1024 MB
standard input
standard output
Joon has a midterm exam tomorrow, but he hasn't studied anything. So he decided to stay up all night to study. He promised himself that he will not stop studying before the sun rises.
Joon's house is in some mountains. For convenience, let's say that Joon is living in a 2-dimensional coordinate system. The mountains are in the region y≥0y≥0, starting at x=a0x=a0, and the boundary of them consists of 2n2n line segments parallel to either y=xy=x or y=−xy=−x.
More precisely, the boundary of the mountains can be described by (2n−1)(2n−1) additional integers, where the iith number aiai of them is the xx-coordinate of the iith cusp of the mountains. The boundary line starts at (a0,0)(a0,0), proceeds parallel to y=xy=x until its xx-coordinate reaches a1a1, then proceeds parallel to y=−xy=−x until its xx-coordinate reaches a2a2, and so on. After the last step, the line proceeds parallel to y=−xy=−x until it meets the xx-axis.
The interior of the mountains is the region below the boundary and above the xx-axis. Thus, the interior and the boundary are disjoint.
At some point between x=a0x=a0 and x=a2n−1x=a2n−1, there is Joon's house on the boundary of the mountains. The size of his house is neglectable compared to the mountains.
Currently, the sun is at the origin and it rises vertically (+y+y direction), 1 per minute. Joon can see the sun if the interior of the mountains does not intersect the straight line segment connecting Joon's house and the sun. Joon is completely exhausted and wants to know when can he stop studying. But as you may expect, he is out of his mind, so he cannot do such difficult math. Help him!
The first line of the input contains an integer nn (1≤n≤1031≤n≤103).
The next line contains 2n2n integers, the iith of which is the integer ai−1ai−1 (1≤a0<⋯<a2n−1≤1061≤a0<⋯<a2n−1≤106).
The last line contains an integer xx, the xx-coordinate of Joon's house (a0≤x≤a2n−1a0≤x≤a2n−1).
It is guaranteed that the boundary of the mountains is in the region y≥0y≥0.
Print exactly one integer mm, the smallest integer such that Joon can see the sun after mm minutes.
2
1 4 6 7
7
5
2
3 4 5 7
7
0
3
4 9 12 13 14 16
15
8

Figure: Illustration of the first example.
题意就是给你山头的横坐标x,然后山的轮廓是一个山头到另一个山头的形状是与y=x或者y=-x平行的,坐标奇数是y=x平行的,偶数是与y=-x平行的,然后给你小孩家坐标的横坐标,他家在山的轮廓线上。
太阳沿着y轴垂直上升,一分钟还是一小时(忘了)上升1米,问你他什么时候能看到太阳。
直接先算出每个山头的横坐标,然后算出来小孩家的纵坐标,然后二分太阳的高度,通过太阳的坐标和小孩家的坐标,推出来直线的方程式,然后枚举每个山头,算出高度与实际的高度比较一下就可以了。
一开始直接枚举山头算直线,最后小数上取整,没过,改了二分过的,而且二分右界一开始设的1e6,wa44,改成1e8过的。。。
题目也小小暗示了二分,因为输出的是一个整数,OK
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+;
const int inf=0x3f3f3f3f; double a[maxn],b[maxn]; int main()
{
int n,pos;
cin>>n;
for(int i=;i<=*n;i++)
cin>>a[i];
cin>>pos;
double x,y;
double bb;
for(int i=;i<*n;i++){
x=a[i];y=b[i];
if(i%!=){
bb=y-x;
x=a[i+];y=x+bb;b[i+]=y;
}
else{
bb=y+x;
x=a[i+];y=(-)*x+bb;b[i+]=y;
}
}
x=a[*n];y=b[*n];
bb=y+x;
x=bb;y=;a[*n+]=x;b[*n+]=;
// for(int i=1;i<=2*n+1;i++){
// cout<<"("<<a[i]<<","<<b[i]<<")"<<endl;
// }
int cnt=;
double X=pos,Y;
for(int i=;i<=*n+;i++){
if(a[i]<X&&a[i+]>=X){
cnt=i+;
double k=(b[i]-b[i+])/(a[i]-a[i+]);
double bb=b[i]-k*a[i];
Y=k*X+bb;
break;
}
}
int ans=inf;
// for(int i=1;i<cnt;i++){
// double k=(Y-b[i])*1.0/(X-a[i]);
// double bb=Y-k*X;
// int flag=0;
// for(int i=1;i<cnt;i++){
// double h=k*a[i]+bb;
// if(h>=b[i]) continue;
// else{flag=1;break;}
// }
// if(flag==0) ans=min(ans,bb);
// }
// ans=ceil(ans);
// if(ans==-0) ans=0;
int l=,r=1e8+;
while(l<=r){
int mid=(l+r)>>;
double k=(Y-mid)/X;
double bb=Y-k*X;
int flag=;
for(int i=;i<cnt;i++){
double h=k*a[i]+bb;
if(h>=b[i]) continue;
else{flag=;break;}
}
if(flag==) r=mid-,ans=min(ans,mid);
else l=mid+;
}
cout<<ans<<endl;
}
Codeforces gym102058 J. Rising Sun-简单的计算几何+二分 (2018-2019 XIX Open Cup, Grand Prix of Korea (Division 2))的更多相关文章
- Codeforces 828B Black Square(简单题)
Codeforces 828B Black Square(简单题) Description Polycarp has a checkered sheet of paper of size n × m. ...
- 【bzoj1822】[JSOI2010]Frozen Nova 冷冻波 计算几何+二分+网络流最大流
题目描述 WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵.我们认为,巫妖和小精灵都可以看成是平面上的点. 当巫妖和小精灵之间的直线 ...
- codeforces 361 D. Levko and Array(dp+二分)
题目链接:http://codeforces.com/contest/361/problem/D 题意:最多可以修改K次数字,每次修改一个数字变成任意值,C=max(a[i+1]-a[i]):求操作之 ...
- codeforces 340C Tourist Problem(简单数学题)
题意:固定起点是0,给出一个序列表示n个点,所有点都在一条直线上,其中每个元素代表了从起点到这个点所走的距离.已知路过某个点不算到达这个点,则从起点出发,到达所有点的方案有许多种.求所有方案走的总路程 ...
- Codeforces 730 J.Bottles (01背包)
<题目链接> 题目大意: 有n个瓶子,各有水量和容量.现在要将这写瓶子里的水存入最少的瓶子里.问你最少需要的瓶子数?在保证瓶子数最少的情况下,要求转移的水量最少. 解题分析:首先,最少的瓶 ...
- Codeforces Gym101572 J.Judging Moose (2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017))
Problem J Judging Moose 这个题是这里面最简单的一个题... 代码: 1 //J 2 #include <stdio.h> 3 #include <math. ...
- codeforces#1163C2. Power Transmission (Hard Edition)(计算几何)
题目链接: https://codeforces.com/contest/1163/problem/C2 题意: 给出$n$个点,任意两点连接一条直线,求相交直线的对数 数据范围: $1 \le n ...
- Codeforces 749B:Parallelogram is Back(计算几何)
http://codeforces.com/problemset/problem/749/B 题意:已知平行四边形三个顶点,求另外一个顶点可能的位置. 思路:用向量来做. #include <c ...
- HDU 4617 Weapon (简单三维计算几何,异面直线距离)
Weapon Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Subm ...
随机推荐
- java后台svg转成png
1.替换img地址 /** * 替换img地址 * @param str -- 前台svg字符串 * @return */ private String transferImgPath(HttpSer ...
- vijos 1655 萌萌的糖果博弈 博弈
背景 用糖果来引诱小朋友学习是最常用的手法,绵羊爸爸就是用糖果来引诱萌萌学习博弈的. 描述 他把糖果分成了两堆,一堆有A粒,另一堆有B粒.他让萌萌和他一起按照下面的规则取糖果:每次可以任意拿走其中一堆 ...
- NOJ/HUST 1095 校赛 Just Go 线段树模板题
Description There is a river, which contains n stones from left to right. These stones are magic, ea ...
- 【BZOJ2882】工艺 [SAM]
工艺 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 小敏和小燕是一对好朋友. 他们正在玩一 ...
- 【BZOJ4818】【SDOI2017】序列计数 [矩阵乘法][DP]
序列计数 Time Limit: 30 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Alice想要得到一个长度为n的序 ...
- 【51NOD-0】1134 最长递增子序列
[算法]动态规划 [题解]经典模型:最长上升子序列(n log n) #include<cstdio> #include<algorithm> #include<cstr ...
- JS语句循环(100以内奇偶数、100以内与7先关的数、100以内整数的和、10以内阶乘、乘法口诀、篮球弹起高度、64格子放东西)
3.循环 循环是操作某一个功能(执行某段代码). ①循环四要素: a 循环初始值 b 循环的条件 c 循环状态 d 循环体 ②for循环 a 穷举:把所有的可能性的都一一列出来. b 迭代:每次循环都 ...
- ubuntu下virtualbox安装freebsd及初步配置
最近尝试了在虚拟机中安装freebsd并进行尝试性的使用 获取镜像 在freebsd的官网,https://www.freebsd.org,即可看到 "Download Freebsd&qu ...
- linux驱动基础系列--Linux下Spi接口Wifi驱动分析
前言 本文纯粹的纸上谈兵,我并未在实际开发过程中遇到需要编写或调试这类驱动的时候,本文仅仅是根据源码分析后的记录!基于内核版本:2.6.35.6 .主要是想对spi接口的wifi驱动框架有一个整体的把 ...
- 网络知识===wireshark抓包数据分析(一)
wireshark分析: 上图是我进行一个HTTP协议的下载,文件内容大概是1.7M左右. 抓包数据: https://files.cnblogs.com/files/botoo/wireshark% ...