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

[SCOI2009]最长距离相关推荐

  1. bzoj 1295: [SCOI2009]最长距离

    题目链接 1295: [SCOI2009]最长距离 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1165  Solved: 619 [Submit ...

  2. BZOJ 1295: [SCOI2009]最长距离 spfa

    1295: [SCOI2009]最长距离 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1295 Description windy有一块 ...

  3. bzoj 1295: [SCOI2009]最长距离(SPFA)

    1295: [SCOI2009]最长距离 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1697  Solved: 919 [Submit][Sta ...

  4. SCOI2009 最长距离

    洛谷 BZOJ 分析 图论题.直接 \(dfs\) 加一点剪枝就能过了. 代码 #include <cmath> #include <cstdio> #include < ...

  5. BZOJ1295 [SCOI2009]最长距离

    Description windy有一块矩形土地,被分为 N*M 块 1*1 的小格子. 有的格子含有障碍物. 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离. 如果从格 ...

  6. B1295 [SCOI2009]最长距离 最短路

    就是一道最短路的裸题,直接跑spfa就行了.(spfa死了) 最后在答案处判断是否障碍物太多,然后就直接找最大值就行. (数据特别水,我错误算法60) 题干: Descriptionwindy有一块矩 ...

  7. 【水】【SCOI】 精简题解

    第二弹 [SCOI2009]生日快乐 搜索.递归划分问题. [SCOI2009]游戏 记忆化搜索.枚举素因子,DP. [SCOI2009]windy数 数位DP,分块统计. [SCOI2009]最长距 ...

  8. OI 刷题记录——每周更新

    每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...

  9. BZOJ ac100题存档

    不知不觉AC100题了,放眼望去好像都是水题.在这里就做一个存档吧(特别感谢各位大神尤其是云神http://hi.baidu.com/greencloud和丽洁姐http://wjmzbmr.com/ ...

最新文章

  1. Android 导致OOM的常见原因
  2. VScode 乱装插件环境破坏踩坑自我反思总结
  3. 8080端口被占用的解决方案(其它端口同理)
  4. Eclipse(properties)插件:PropertyEditor在线安装
  5. MySQL安装教程,包含所有平台(图解)
  6. 的训练过程_【能力模式】能力培养是一个训练过程,掌握三个要点,一个诀窍...
  7. javahost(JVM虚拟DNS)解决hosts程序中hosts配置问题
  8. WPF框架教程 | 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器
  9. python列表姓氏_python数据分析实例(六) 中国姓氏数据
  10. Yann LeCun最新访谈:能量模型是通向自主人工智能系统的起点
  11. 9月计算机一级报名入口,北京市2018年9月计算机一级报名时间|网上报名入口【已正式开通】...
  12. swiper实现触摸滑动
  13. 前置仓没活路?盒马mini要做行业终极目标还为时尚早
  14. linux试密码3次则屏蔽ip,linux centos封锁多次ssh密码错误的主机IP
  15. 西门子uss通讯实例_西门子plc1200系列的功能特点有哪些?
  16. java 设置组件填充_Java学习笔记(三)Java2D组件
  17. OSChina 周六乱弹 —— 我媳妇是条蛇
  18. 百度SEO全自动百度挂机循环提交工具(MIP 主动推送)泛目录专用
  19. 如何管理NVivo的查询结果
  20. BZOJ 1127: [POI2008]KUP 最大子矩阵

热门文章

  1. Windows - Windows下安装MSI程序遇到2503和2502错误
  2. 截取utf8中文字符串
  3. javascript设计模式-继承
  4. 设计模式之Builder (创建者模式)的一些个人理解(转)
  5. 12.13记录//QQDemo示例程序源代码
  6. java 统计单词个数和标点符号
  7. 一文搞懂:词法作用域、动态作用域、回调函数、闭包
  8. Spring4.0之四:Meta Annotation(元注解)
  9. 2016年学习Linux决心书(老男孩教育在线课程班第二期)
  10. magento 瘦身数据库