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多条件if语句简写发生Uncaught SyntaxError: Unexpected token }

    改写原生js 多条件if判断语句时,采用三元方法,发生Uncaught SyntaxError: Unexpected token } function compareImgSize() { var ...

  2. 笨办法学Python - 习题3: Numbers and Math

    目录 习题 3: 数字和数学计算 算术运算符 加分习题: 我的答案: 总结: 扩展: Python比较运算符 Python赋值运算符 Python位运算符 Python逻辑运算符 Python成员运算 ...

  3. Scrum Meeting 10.29

    成员 今日活动 明日计划 用时 徐越 配置tomcat+eclipse 将上届后端代码迁移到服务器 4h 赵庶宏 与数据库连接的java代码学习及编写,测试代码 进行数据库的建立并学习数据库方面的知识 ...

  4. [BUAA OO]第一次博客作业

    第一次作业 第一次进行面向对象的编程,不论是针对数据设计类还是对方法进行合适的归于不同类中,都不是很熟悉.所写出来的程序还是面向过程+有函数的类(虽然现在很大程度上感觉起来也是这样).索性作业难度并不 ...

  5. ssh框架配置数据源 数据库连接没有正常释放

    通过多天的改bug 对数据源这个东西了解多了..    我发现 spring+hibernate下  申请数据库连接是在一个action方法内  也就是说  action 里面有三个 service方 ...

  6. SQL Server 无法连接到本地服务器

    未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接:     解决办法: 在服务中启动SQL Server (MSSQLSERVER)这个服务.

  7. beta阶段成果展示博客

    跟着我们一一点一点揭开蒙娜丽莎的微笑 - 本次beta阶段之前,我们团队,对其他组在事后诸葛亮期间对我们的评价进行深刻的审视,特别是缺点方面,开了好几次的站立会议,专门讨论beta的主要方向和任务.最 ...

  8. debug阶段贡献分

    组名: 新蜂 组长: 武志远 组员: 宫成荣 谢孝淼 杨柳 李峤 项目名称: java俄罗斯方块NEO 发布时间:11.29 武志远 武志远 武志远 武志远 武志远 宫成荣 宫成荣 杨柳 宫成荣 宫成 ...

  9. 清除浮动小记,兼容Ie6,7

    .clearfix { *zoom:1;} .clearfix:after{clear:both; display:block; height:0; visibility:hidden; line-h ...

  10. DTCping 的简单使用与排错

    1. 工具下载路径 https://support.microsoft.com/zh-cn/help/918331/how-to-troubleshoot-connectivity-issues-in ...