Problem Statement

In the city of Nevermore, there are 108 streets and 108 avenues, both numbered from0 to 108−1. All streets run straight from west to east, and all avenues run straight from south to north. The distance between neighboring streets and between neighboring avenues is exactly 100 meters.

Every street intersects every avenue. Every intersection can be described by pair(x,y), where x is avenue ID and y is street ID.

There are N fountains in the city, situated at intersections (Xi,Yi). Unlike normal intersections, there's a circle with radius 10 meters centered at the intersection, and there are no road parts inside this circle.

The picture below shows an example of how a part of the city with roads and fountains may look like.

City governors don't like encountering more than one fountain while moving along the same road. Therefore, every street contains at most one fountain on it, as well as every avenue.

Citizens can move along streets, avenues and fountain perimeters. What is the shortest distance one needs to cover in order to get from intersection (x1,y1) to intersection (x2,y2)?

Constraints

  • 0≤x1,y1,x2,y2<108
  • 1≤N≤200,000
  • 0≤Xi,Yi<108
  • XiXj for ij
  • YiYj for ij
  • Intersections (x1,y1) and (x2,y2) are different and don't contain fountains.
  • All input values are integers.

Input

Input is given from Standard Input in the following format:

x1 y1 x2 y2
N
X1 Y1
X2 Y2
:
XN YN

Output

Print the shortest possible distance one needs to cover in order to get from intersection (x1,y1) to intersection (x2,y2), in meters. Your answer will be considered correct if its absolute or relative error doesn't exceed 10−11.

Sample Input 1

1 1 6 5
3
3 2
5 3
2 4

Sample Output 1

891.415926535897938

One possible shortest path is shown on the picture below. The path starts at the blue point, finishes at the purple point and follows along the red line.

Sample Input 2

3 5 6 4
3
3 2
5 3
2 4

Sample Output 2

400.000000000000000

Sample Input 3

4 2 2 2
3
3 2
5 3
2 4

Sample Output 3

211.415926535897938
 

愚人节赛的第二题(滑稽)。
首先可以知道,每经过一个喷泉,都只可能走1/4或1/2个圆。而且走半个圆相对直走来说更长,走1/4个圆相对直走来说更短。
同时,由于只有一个询问,所以可以把考虑的范围缩到以边(S,T)为对角线的矩形中。
而且,每一小段的长度都远大于走喷泉节省的距离,且喷泉数量很有限,所以最优解中不存在绕路走喷泉的情况。
设S在矩形左下角,T在矩形右上角,易知此时最优解中经过的喷泉的x,y坐标单调上升,LIS直接刚。
需要注意的是,若矩形的每一行(列)都存在要走的喷泉,则必有一个喷泉要走整圈(否则会走出矩形)。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define y1 Y1
using namespace std;
const int maxn=,inf=1e8;
const double qarc=acos(-)*5.0;
int n,cnt,x1,x2,y1,y2;
int f[maxn],g[maxn],b[maxn];
struct p{int x,y;}a[maxn];
inline int read(){
int x=,f=;char ch=getchar();
for(;ch<''||ch>'';f=ch=='-'?-:,ch=getchar());
for(;ch>=''&&ch<='';x=x*+ch-,ch=getchar());
return x*f;
}
bool cmp(p a,p b){return a.x<b.x;}
int main(){
x1=read();y1=read();x2=read();y2=read();n=read();
for(int i=;i<=n;i++)a[i].x=read(),a[i].y=read();
if(x1>x2){
x1=inf-x1;x2=inf-x2;
for(int i=;i<=n;i++)a[i].x=inf-a[i].x;
}
if(y1>y2){
y1=inf-y1;y2=inf-y2;
for(int i=;i<=n;i++)a[i].y=inf-a[i].y;
}
sort(a+,a+n+,cmp);
int tot=,ans1=;
for(int i=;i<=n;i++)
if(a[i].x>=x1&&a[i].x<=x2&&a[i].y>=y1&&a[i].y<=y2)
b[++tot]=a[i].y;
for(int i=;i<=tot;i++){
f[i]=lower_bound(g+,g+ans1+,b[i])-g;
if(f[i]>ans1)ans1=f[i],g[ans1]=b[i];
else g[f[i]]=min(g[f[i]],b[i]);
}
double ans=(double)(x2+y2-x1-y1)*100.0;
ans-=ans1*(-qarc);
if(ans1==min(y2-y1+,x2-x1+))ans+=qarc;
printf("%.15lf",ans);
return ;
}

[AtCoder 2702]Fountain Walk - LIS的更多相关文章

  1. 【agc019C】Fountain Walk

    Portal --> agc019C Description 有一个\(10^8*10^8\)的网格图,一格距离为\(100\),第\(x\)条竖线和第\(y\)条横线的交点记为\((x,y)\ ...

  2. Agc019_C Fountain Walk

    传送门 题目大意 给定网格图上起点和终点每个格子是长为$100$米的正方形,你可以沿着线走. 平面上还有若干个关键点,以每个关键点为圆心,$10$为半径画圆,表示不能进入圆内的线,但是可以从圆周上走, ...

  3. 【AtCoder】AGC019

    A - Ice Tea Store 算一下每种零售最少的钱就行,然后优先买2,零头买1 #include <bits/stdc++.h> #define fi first #define ...

  4. AtCoder Beginner Contest 085(ABCD)

    A - Already 2018 题目链接:https://abc085.contest.atcoder.jp/tasks/abc085_a Time limit : 2sec / Memory li ...

  5. AtCoder Grand Contest 031 简要题解

    AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...

  6. AtCoder Beginner Contest 165

    比赛链接:https://atcoder.jp/contests/abc165/tasks A - We Love Golf 题意 区间 $[a, b]$ 中是否存在 $k$ 的倍数. 代码 #inc ...

  7. Lis日常维护

    1.[问题]护士站打印LIs条码,出来是PDF格式的 [解决]在文件夹Client\NeusoftLis\Xml\Print.xml中把BarcodePrint Name的值改成安装的斑马打印机名(不 ...

  8. uva10635 LIS

    Prince and PrincessInput: Standard Input Output: Standard Output Time Limit: 3 Seconds In an n x n c ...

  9. python os.walk()

    os.walk()返回三个参数:os.walk(dirpath,dirnames,filenames) for dirpath,dirnames,filenames in os.walk(): 返回d ...

随机推荐

  1. 论文笔记:Mask R-CNN

    之前在一次组会上,师弟诉苦说他用 UNet 处理一个病灶分割的任务,但效果极差,我看了他的数据后发现,那些病灶区域比起整张图而言非常的小,而 UNet 采用的损失函数通常是逐像素的分类损失,如此一来, ...

  2. 【转】一文掌握 Linux 性能分析之网络篇

    [转]一文掌握 Linux 性能分析之网络篇 比较宽泛地讲,网络方向的性能分析既包括主机测的网络配置查看.监控,又包括网络链路上的包转发时延.吞吐量.带宽等指标分析.包括但不限于以下分析工具: pin ...

  3. selenium采用xpath方法识别页面元素

    有些HTML页面中的元素中属性较少,经常有找不到id.class.name等常用属性的时候,这个时候xpath.css就能很好的识别到我们的元素. Firefox和chrome浏览器中均有xpath. ...

  4. Python字符串的两种方式——百分号方式,format的方式

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  5. 规范开发目录 及 webpack多环境打包文件配置

    规范开发目录 普通项目 开发目录: ├── project-name ├── README.md ├── .gitignore ├── assets ├── ├── js ├── ├── css ├─ ...

  6. Java_File类

    File类以抽象的方式代表文件名和目录路径.该类主要用于文件和目录的创建.查找.删除等.先来看一下File的构造方法: // 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例 File ...

  7. windows10中微软小娜cortana如何彻底卸载删除?

    windows10中的Cortana可以通过语音干很多事情,但是对于我们来说用处不大,而且开机十分占用内存,下面教大家如何彻底的卸载并删除: 首先下载卸载Cortana的软件,下载链接:http:// ...

  8. JS监听浏览器的返回、后退、上一页按钮的事件方法

    在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的需求,那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包等 ...

  9. requests补充

    HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种.其中,POST 一般用来向服务端提交数据,本文 ...

  10. 使用X509Certificate2类操作证书文件

    public class CertHelper { string pfxPath = @"E:\开发辅助项目\cert\taisuyuanqing.pfx"; string cer ...