[AtCoder 2702]Fountain Walk - LIS
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
- Xi≠Xj for i≠j
- Yi≠Yj for i≠j
- 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
愚人节赛的第二题(滑稽)。
#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的更多相关文章
- 【agc019C】Fountain Walk
Portal --> agc019C Description 有一个\(10^8*10^8\)的网格图,一格距离为\(100\),第\(x\)条竖线和第\(y\)条横线的交点记为\((x,y)\ ...
- Agc019_C Fountain Walk
传送门 题目大意 给定网格图上起点和终点每个格子是长为$100$米的正方形,你可以沿着线走. 平面上还有若干个关键点,以每个关键点为圆心,$10$为半径画圆,表示不能进入圆内的线,但是可以从圆周上走, ...
- 【AtCoder】AGC019
A - Ice Tea Store 算一下每种零售最少的钱就行,然后优先买2,零头买1 #include <bits/stdc++.h> #define fi first #define ...
- AtCoder Beginner Contest 085(ABCD)
A - Already 2018 题目链接:https://abc085.contest.atcoder.jp/tasks/abc085_a Time limit : 2sec / Memory li ...
- AtCoder Grand Contest 031 简要题解
AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...
- AtCoder Beginner Contest 165
比赛链接:https://atcoder.jp/contests/abc165/tasks A - We Love Golf 题意 区间 $[a, b]$ 中是否存在 $k$ 的倍数. 代码 #inc ...
- Lis日常维护
1.[问题]护士站打印LIs条码,出来是PDF格式的 [解决]在文件夹Client\NeusoftLis\Xml\Print.xml中把BarcodePrint Name的值改成安装的斑马打印机名(不 ...
- uva10635 LIS
Prince and PrincessInput: Standard Input Output: Standard Output Time Limit: 3 Seconds In an n x n c ...
- python os.walk()
os.walk()返回三个参数:os.walk(dirpath,dirnames,filenames) for dirpath,dirnames,filenames in os.walk(): 返回d ...
随机推荐
- 机器学习基石12-Nonlinear Transformation
注: 文章中所有的图片均来自台湾大学林轩田<机器学习基石>课程. 笔记原作者:红色石头 微信公众号:AI有道 上一节课介绍了分类问题的三种线性模型,可以用来解决binary classif ...
- python 识别图片文字
今天群里有兄弟问如何把图片的文字给识别出来 对于python来说这不是小菜一碟吗,于是乎让pupilheart狠狠的吹了一波(哈哈,竟然没懂),下面将整个实现过程给大家实现下: 方法一:自己搞定ORC ...
- Linux库多重依赖
源文件: //world.cpp #include <stdio.h> void world(void) { printf("world.\n"); } //hello ...
- swoole异步群发模板消息
1.用的是TP5.1的框架,swoole分成一个客户端发送接收消息,一个服务器负责处理信息 服务端代码,服务器要先安装swoole拓展,用 php server.php 启动进程监听 <?php ...
- java常用类:1。包装类(以Integer类为例)2.String类 3.StringBuffer
包装类 把八大基本数据类型封装到一个类中,并提供属性和方法,更方便的操作基本数据类型. 包装类的出现并不是用于取代基本数据类型,也取代不了. 包装类位于java.lang包中. Number 类 N ...
- css 自制一些小特效
Github地址 位于gh-pages分支上 https://github.com/a1115040996/MyHTML/ 3D 卡片特效 地址: https://a1115040996.github ...
- celery 定时任务时间篇
1.Celery加入定时任务 Celery除了可以异步执行任务之外,还可以定时执行任务.在实例代码的基础上写个测试方法: 1 #coding:utf-8 2 from celery.task.sche ...
- IBOS云办公系统二次开发之功能介绍(PHP技术)
IBOS自动化办公系统是我见到的功能.架构最好的开源自动化办公系统,功能与企业需求吻合度之高.架构之灵活,让我不得不将之介绍给大家,让跟多需要学习PHP开发的朋友来了解她,拥抱她! 如果您还没有很好的 ...
- Docker 学习9 Docker私有registry
一.docker registry分类 二.安装docker-hub提供的registry 1.安装 [root@localhost yum.repos.d]# yum install -y dock ...
- java时间处理,获取当前时间的小时,天,本周周几,本周周一的日期,本月一号的日期
1.时间转时间戳 public static long strToTimestamp(String dateTimeStr) throws Exception { Timestamp time = T ...