Portal --> agc019C

Description

  有一个\(10^8*10^8\)的网格图,一格距离为\(100\),第\(x\)条竖线和第\(y\)条横线的交点记为\((x,y)\),有一些点上面有半径为\(10\)的喷泉(一个圆),一行或者一列至多一个喷泉,现在一个人要从\((x1,y1)\)走到\((x2,y2)\),只能沿着网格走,遇到喷泉的话可以沿着边缘走,问最短距离

  

Solution

  一开始看错题以为可以不沿着网格走的我真的是太弱智了。。

​  

  因为只能沿着网格走,所以我们肯定只会往一个方向走(不会来回走这样),然后计算一下就会发现。。因为\(2\pi*\frac{1}{4}\)是小于\(10*2\)的,所以我们尽量在有喷泉的地方拐弯,以从左下走到右上为例的话,每次拐弯\(y\)会\(+1\),然后我们又要尽量找有喷泉的地方拐弯,所以其实就是相当于找最长的上升序列

  如果说是从右上走到左下的话就反过来(或者直接把所有的坐标反转一下再进行同样的操作即可)

  一个需要注意的点:如果说最长的上升序列的长度\(=min(abs(x1-x2),abs(y1-y2))+1\),也就是说每一行/每一列都有喷泉的话,答案要再加上\(\frac{1}{4}\)圆周长,因为最后一个喷泉不能拐弯了而是要绕过去

  

  mark:不要一看到有点像几何之类的就怂==又不一定是难题。。。

  mark:贪心什么的。。以及看清楚题目!

  

  代码大概长这个样子

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const double pi=acos(-1);
const int N=2*(1e5)+10,inf=2147483647;
struct F{
int x,y;
void read(){scanf("%d%d",&x,&y);}
friend bool operator < (F x,F y){return x.x<y.x;}
}a[N];
int lis[N],rec[N];
int n,m;
int stx,sty,edx,edy;
double ans;
int Abs(int x){return x<0?-x:x;}
void solve(){
int tmp,len=0;
memset(rec,-1,sizeof(rec));
for (int i=1;i<=lis[0];++i){
if (rec[len]<lis[i]){
rec[++len]=lis[i];
continue;
}
tmp=lower_bound(rec+1,rec+1+len,lis[i])-rec;
rec[tmp]=lis[i];
}
if (len==(edx-stx+1)||len==Abs(sty-edy)+1) ans=pi*5.0;
else ans=0;
ans+=1LL*((edx-stx)+Abs(sty-edy))*100;
ans+=(pi*5.0-20)*len;
printf("%.15lf\n",ans);
} int main(){
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif
scanf("%d%d%d%d",&stx,&sty,&edx,&edy);
if (stx>edx) swap(stx,edx),swap(sty,edy);
scanf("%d",&n);
for (int i=1;i<=n;++i) a[i].read();
sort(a+1,a+1+n);
if (sty>edy){
for (int i=1;i<=n;++i) a[i].y=1e8-a[i].y+1;
sty=1e8-sty+1; edy=1e8-edy+1;
}
lis[0]=0;
for (int i=1;i<=n&&a[i].x<=edx;++i)
if (stx<=a[i].x){
if ((sty>=edy&&edy<=a[i].y&&a[i].y<=sty)||(sty<=edy&&sty<=a[i].y&&a[i].y<=edy))
lis[++lis[0]]=a[i].y;
}
solve();
}

【agc019C】Fountain Walk的更多相关文章

  1. 【xsy1503】 fountain DP

    题目大意:给你$D$个格子,有$n$个喷水器,每个喷水器有一个喷水距离$r_i$. 现在你需要在这$D$个格子中选择$n$个位置按照任意顺序安装这$n$个喷水器,需要满足$n$个喷水器互相喷不到对方. ...

  2. 【BZOJ3470】Freda’s Walk 概率与期望

    [BZOJ3470]Freda’s Walk Description 雨后的Poetic Island空气格外清新,于是Freda和Rainbow出来散步. Poetic Island的交通可以看作一 ...

  3. 带给你灵感:30个超棒的 SVG 动画展示【上篇】

    前端开发人员和设计师一般使用 CSS 来创建 HTML 元素动画.然而,由于 HTML 在创建图案,形状,和其他方面的局限性,它们自然的转向了 SVG,它提供了更多更有趣的能力.借助SVG,我们有更多 ...

  4. 【转】Cocos2d - 观察者模式NotificationCenter

    http://shahdza.blog.51cto.com/2410787/1611575 [唠叨] 观察者模式 也叫订阅/发布(Subscribe/Publish)模式,是 MVC( 模型-视图-控 ...

  5. 【Sharing】如何成为一名黑客

    [声明]此文为转载,只为收藏. 从小到大听说了无数关于“电脑黑客”的故事,比如XXX入侵美国五角大楼,再比如前几年的“熊猫烧香”病毒,这些故事的主角都被我们的媒体称之为“黑客”.其实这些人,更大程度上 ...

  6. 【转】最短路&差分约束题集

    转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...

  7. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  8. 【综述】(MIT博士)林达华老师-"概率模型与计算机视觉”

    [综述](MIT博士)林达华老师-"概率模型与计算机视觉” 距上一次邀请中国科学院的樊彬老师为我们撰写图像特征描述符方面的综述(http://www.sigvc.org/bbs/thread ...

  9. 【CF492E】【数学】Vanya and Field

    Vanya decided to walk in the field of size n × n cells. The field contains m apple trees, the i-th a ...

随机推荐

  1. js备忘录6

  2. 欢迎来怼--第二十九次Scrum会议

    一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 小组照片 二.开会信息 时间:2017/11/17 15:55~16:25,总计30min. 地 ...

  3. java的内存管理机制

    1.内存区域的分类 栈内存:基本类型变量和对象的引用,优势在于存取速度快 堆内存:new创建的对象和数组以及对象的实例化变量,优势在于动态分配内存,但是存取速度相对较慢 2.不同类型的内存分配 (1) ...

  4. 20135234mqy 实验二 Java面向对象程序设计

      北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1352  姓名:mqy  学号:20135234 成绩:             指导教师: ...

  5. 调研Android的开发环境的发展演变

    在 知道要做基于移动端的项目实践时,我就选定了Android,回来的时候查了很多相关的知识,很多人都在问开发安卓软件,使用eclipse还是用 Android studio?其实,也没有一个准确的答案 ...

  6. HTTP&HTTPS、GET&POST

    1.HTTP&HTTPS: HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure ...

  7. Java面试&编写程序:使子线程循环10次,紧接着主线程循环100次,来回50次

    package com.cwcec.test; public class TraditionalThreadCommunication { /** * @param args */ public st ...

  8. Java实现小学四则运算练习

     Github项目地址:https://github.com/feser-xuan/Arithmetic.git 1.需求分析 软件基本功能要求如下: 程序可接收一个输入参数n,然后随机产生n道加减乘 ...

  9. android自动化之appium的环境搭建

    简介appium     appium是C/S架构,appium的核心是一个web服务器,它提供了一套REST的接口,他会接收客户端的连接,监听到命令.执行会再将结果通过HTTP响应返还给客户端.ap ...

  10. Excel中用REPT函数制作图表

    本文从以下七个方面,阐述在Excel中用REPT函数制作图表: 一. 图形效果展示 二. REPT语法解释 三. REPT制作条形图 四. REPT制作漏斗图 五. REPT制作蝴蝶图 六. REPT ...