[SCOI2009]最长距离

Description
windy有一块矩形土地,被分为 NM 块 11 的小格子。 有的格子含有障碍物。 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离。 如果从格子A不可以走到格子B,就没有距离。 如果格子X和格子Y有公共边,并且X和Y均不含有障碍物,就可以从X走到Y。 如果windy可以移走T块障碍物,求所有格子间的最大距离。 保证移走T块障碍物以后,至少有一个格子不含有障碍物。

Input
输入文件maxlength.in第一行包含三个整数,N M T。 接下来有N行,每行一个长度为M的字符串,'0'表示空格子,'1'表示该格子含有障碍物。

Output
输出文件maxlength.out包含一个浮点数,保留6位小数。

Sample Input 1
3 3 0
001
001
110

Sample Output 1
1.414214

Sample Output 2
3.605551

Sample Input 2
4 3 0
001
001
011
000

Sample Output 3
2.828427

Sample Input 3
3 3 1
001
001
001

HINT
20%的数据,满足 1 <= N,M <= 30 ; 0 <= T <= 0 。 40%的数据,满足 1 <= N,M <= 30 ; 0 <= T <= 2 。 100%的数据,满足 1 <= N,M <= 30 ; 0 <= T <= 30 。


N,M很小,我们可以直接跑N×M次SPFA,求出任意两点之间经过最少障碍数,然后\(N^2\)枚举,判断障碍数,直接统计答案

/*program from Wolfycz*/
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x7f7f7f7f
#define sqr(x) ((x)*(x))
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline char gc(){static char buf[1000000],*p1=buf,*p2=buf;return p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++;
}
inline int frd(){int x=0,f=1;char ch=gc();for (;ch<'0'||ch>'9';ch=gc())   if (ch=='-')    f=-1;for (;ch>='0'&&ch<='9';ch=gc()) x=(x<<1)+(x<<3)+ch-'0';return x*f;
}
inline int read(){int x=0,f=1;char ch=getchar();for (;ch<'0'||ch>'9';ch=getchar())  if (ch=='-')    f=-1;for (;ch>='0'&&ch<='9';ch=getchar())    x=(x<<1)+(x<<3)+ch-'0';return x*f;
}
inline void print(int x){if (x<0)    putchar('-'),x=-x;if (x>9)    print(x/10);putchar(x%10+'0');
}
const int N=30;
const int dx[4]={-1,1,0,0};
const int dy[4]={0,0,-1,1};
int dist[N+10][N+10][N+10][N+10];
int n,m,T;
struct S1{int x,y;void insert(int _x,int _y){x=_x,y=_y;}
}h[N*N+10];
char map[N+10][N+10];
bool vis[N+10][N+10];
bool in_map(int x,int y){return x>0&&x<=n&&y>0&&y<=m;}
void SPFA(int x,int y,int dis[N+10][N+10]){memset(vis,0,sizeof(vis));h[1].insert(x,y),dis[x][y]=(map[x][y]=='1'),vis[x][y]=1;int head=0,tail=1;while (head!=tail){if (++head>N*N) head=1;int Nx=h[head].x,Ny=h[head].y;for (int k=0;k<4;k++){int tx=Nx+dx[k],ty=Ny+dy[k];if (in_map(tx,ty)&&dis[tx][ty]>dis[Nx][Ny]+(map[tx][ty]=='1')){dis[tx][ty]=dis[Nx][Ny]+(map[tx][ty]=='1');if (!vis[tx][ty]){if (++tail>N*N) tail=1;h[tail].insert(tx,ty);vis[tx][ty]=1;}}}vis[Nx][Ny]=0;}
}
int main(){n=read(),m=read(),T=read();memset(dist,63,sizeof(dist));for (int i=1;i<=n;i++)  scanf("%s",map[i]+1);for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)SPFA(i,j,dist[i][j]);double Ans=0;for (int ox=1;ox<=n;ox++)for (int oy=1;oy<=m;oy++)for (int ex=1;ex<=n;ex++)for (int ey=1;ey<=m;ey++)if (dist[ox][oy][ex][ey]<=T)Ans=max(Ans,sqrt(sqr(ex-ox)+sqr(ey-oy)));printf("%.6lf\n",Ans);return 0;
}

转载于:https://www.cnblogs.com/Wolfycz/p/9993650.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

维修点滴:键盘进杂物

还是那台使用USB口连接打印机的计算机&#xff0c;出现故障。 故障现象是&#xff1a;鼠标放在有上下左右的文件或者栏目上&#xff0c;就上下左右的乱串——怪不得叫鼠标&#xff0c;呵呵。 我刚开始以为是电脑中病毒了&#xff0c;就重做系统&#xff08;也顺便安装了打印机驱…

说好的薪资统计

本来是不想把最后的统计发出来的&#xff0c;但是后台很多同学都想看看嵌入式的薪资&#xff0c;我自己也答应了会发出来&#xff0c;所以趁着这个假期再发一次&#xff0c;也让大家做个参考。不想发的原因是因为担心有别有用心的人拿这个薪资来做比较&#xff0c;多少会让大家…

STL面试题

http://blog.csdn.NET/tianya_team/article/details/50753759 1.说说std::vector的底层&#xff08;存储&#xff09;机制。 vector就是一个动态数组&#xff0c;里面有一个指针指向一片连续的内存空间&#xff0c;当空间不够装下数据时&#xff0c;会自动申请另一片更大的空间…

实现IButtonControl接口时, PerformClick()方法的代码怎么写,请高手指导!

在做WinForm时&#xff0c;想做一个像Asp.Net里的ImageButton的控件&#xff0c;于是自己写了一个自定义控件&#xff0c;名为&#xff1a;ImageButton&#xff0c;继承PictureBox类&#xff0c;并实现IButtonControl接口&#xff0c;但是实现IButtonControl接口时必须重写IBut…

html5 网络断开,html5 – websocket不断断开连接

我一直在努力建立一个在浏览器中运行的websocket聊天室.我已经做了一些谷歌搜索,并找到了一个提供示例websocket连接的网站(www.websocket.org/echo.html).但每当我尝试“连接”按钮时,它会立即显示“已断开连接”,并且我无法发送消息(这只发生在Chrome上).所以我在Firefox上尝…

各种仓储模式的学习

1. 仓储类和仓储接口 https://www.cnblogs.com/caofangsheng/p/5801926.html 2. 泛型仓储类和 工作单元 https://www.cnblogs.com/caofangsheng/p/5804057.html 3. 简单的泛型仓储接口和泛型仓储类 https://www.jianshu.com/p/89b51753b2cf转载于:https://www.cnblogs.com/bi…

【转载】 Asp.net Mvc 3当然也不会例

最快的学习方法&#xff1a;找到官方的教程&#xff0c;最好是类似Msdn演练或者冠以Step By Step的&#xff0c;跟着做一遍&#xff0c;做的过程中可以拷贝少量教程中的代码&#xff0c;确保每个步骤、每行代码含义都能够明白&#xff0c;中途随手记录一下&#xff0c;每个步骤…

什么是BSP工程师?

文章转自https://luomuxiaoxiao.com/?p170一、嵌入式系统要明白什么是嵌入式软件工程师&#xff0c;我们先从嵌入式系统&#xff08;嵌入式设备&#xff09;说起。维基百科上对嵌入式系统的定义如下&#xff1a;嵌入式系统&#xff08;Embedded System&#xff09;&#xff0c…

《STL源码剖析》相关面试题总结

一、STL简介 STL提供六大组件&#xff0c;彼此可以组合套用&#xff1a; 容器 容器就是各种数据结构&#xff0c;我就不多说&#xff0c;看看下面这张图回忆一下就好了&#xff0c;从实现角度看&#xff0c;STL容器是一种class template。 算法 各种常见算法&#xff0c;如sor…

VB.NET 中的ref 和C#中的ref 格式区别

今天把一个VB.NET的程序翻成C#的&#xff0c;在ref这堵了半天。函数定义是这样的&#xff1a;PublicSharedFunctionGetUsers(ByValportalId AsInteger, ByValisHydrated AsBoolean, ByValpageIndex AsInteger, ByValpageSize AsInteger, ByReftotalRecords AsInteger) AsArrayL…

工厂好的html页面,jquery中被誉为工厂函数的是什么?

jquery中被誉为工厂函数的是“$()”。在jQuery中&#xff0c;无论我们使用哪种类型的选择符都需要从一个“$”符号和一对“()”开始。下面本篇文章给大家介绍一下。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助。jQuery的三种$()“$”…

如何学好单片机?​嵌入式第一门课

很多想学单片机的人问我的第一句话就是&#xff1a;怎样才能学好单片机&#xff1f;对于这个问题我今天就我自己是如何开始学单片机&#xff0c;如何开始上手&#xff0c;如何开始熟练这个过程给大家讲讲。先说说单片机&#xff0c;一般我们现在用的比较多的的MCS-51的单片机&a…

在 Mac 上通过 Docker 运行 Asp.net Core 简易教程

首先&#xff0c;你需要在 Mac 上安装好 Docker 下载地址 https://download.docker.com/mac/stable/Docker.dmg 或者查看别人的 安装教程 怎么安装这里就不在赘述了。 打开 Docker 输入命令 docker run -d --rm -p 8000:80 --name aspnetcore_sample microsoft/dotnet-sample…

TCP协议-相关面试题

一、TCP协议简介 一般问到TCP协议的时候 最常见的是TCP连接建立和断开的过程&#xff0c;也就是三次握手和四次挥手&#xff0c;两张图足矣。 1.1 三次握手 1.2 四次挥手 二、常见面试题 2.1 TCP连接阶段 2.1.1 发送序号和确认序号问题 例&#xff1a; TCP建立连接的过程采用三…

Android RIL源码研究笔记 の ril (一)

Android源码目录hardware/ril/libril中总共包含5个C/CPP文件&#xff0c;它们分别是ril_commands.h、ril_unsol_commands.h、ril_event.h、ril_event.cpp和ril.cpp。这篇文章主要分析ril.cpp文件。 我们可以将该文件划分为定义部分和实现部分&#xff0c;先来看定义部分&#x…

[转载]Manually configuring Microsoft Internet Information Services (IIS)

Manually configuring Microsoft Internet Information Services (IIS) 原文摘自http://publib.boulder.ibm.com/infocenter/wasinfo/v5r1//index.jsp?topic/com.ibm.websphere.base.doc/info/aes/ae/tins_manualWebIIS.html This topic describes manual configuration setti…

生活中的计算机趣味知识大全,五个有趣的电脑小知识

五个有趣的电脑小知识1&#xff0c; 更改临时文件夹的路径问&#xff1a;我使用的系统为Windows XP&#xff0c;我想把系统临时文件(Temp文件)存放区由C盘移到其他分区(如D盘)&#xff0c;请问该如何*作&#xff1f;答&#xff1a;在“我的电脑上点鼠标右键&#xff0c;选择“属…

稚晖君又整活啦!基于全志F1C200s的超迷你

转自全志在线B站最强小电视&#xff08;基于全志H3&#xff09;钢铁侠机械臂曾经靠着“B站最强小电视”以及号称“钢铁侠机械臂”等硬核产品出圈的稚晖君又双叒叕来整活啦&#xff01;稚晖君B站首页这次稚晖君开源了基于全志F1C200s的一个超迷你&低成本的Linux开发板&#…

分布式为什么使用Redis

一 为什么使用 Redis 在项目中使用 Redis&#xff0c;主要考虑两个角度&#xff1a;性能和并发。如果只是为了分布式锁这些其他功能&#xff0c;还有其他中间件 Zookpeer 等代替&#xff0c;并非一定要使用 Redis。 性能&#xff1a; 如下图所示&#xff0c;我们在碰到需要执行…

手动添加mysql服务

重新安装系统以后不再重新安装mysql 只需要我们把mysql服务添加到系统服务里即可,一下是具体步骤: 安装mysql服务 新建并编辑内容如下的一个bat文件&#xff0c;并且执行&#xff08;盘符:\mysql\bin\mysqld-nt.exe为安装目录&#xff0c;按实际情况填写,如果安装路径里面有空格…