Description

windy有一块矩形土地,被分为 N*M 块 1*1 的小格子。 有的格子含有障碍物。 如果从格子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

【输入样例一】
3 3 0
001
001
110

【输入样例二】
4 3 0
001
001
011
000

【输入样例三】
3 3 1
001
001
001

Sample Output

【输出样例一】
1.414214

【输出样例二】
3.605551

【输出样例三】
2.828427

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 。

 
逆向思维
枚举两点,用spfa判断到达最少需要移走多少块。。。就完了
 #include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;
const int fx[]={,,,-},fy[]={-,,,};
double ans;
struct qq{int x,y;}q[];
int map[][],dis[][];
int n,m,t,cnt;
char s[];
bool inq[][];
int sqr(int x) {return x*x;}
double calc(int x1,int y1,int x2,int y2){
return sqrt(double(sqr(x1-x2)+sqr(y1-y2)));
}
void spfa(int xx,int yy){
int head,tail;
head=tail=;
q[++tail].x=xx,q[tail].y=yy;
memset(dis,,sizeof(dis));
memset(inq,,sizeof(inq));
dis[xx][yy]=;
inq[xx][yy]=;
while(head<tail){
int x=q[++head].x,y=q[head].y;
for(int i=;i<;i++){
if(x+fx[i]<=||y+fy[i]<=||x+fx[i]>n||y+fy[i]>m) continue;
if(dis[x+fx[i]][y+fy[i]]>dis[x][y]+map[fx[i]+x][y+fy[i]]){
dis[x+fx[i]][y+fy[i]]=dis[x][y]+map[fx[i]+x][y+fy[i]];
if(!inq[x+fx[i]][y+fy[i]]){
inq[x+fx[i]][y+fy[i]]=;
q[++tail].x=fx[i]+x,q[tail].y=fy[i]+y;
}
}
}
inq[x][y]=;
}
} void ch(int i,int j){
for(int ii=;ii<=n;ii++)
for(int jj=;jj<=m;jj++)
if(dis[ii][jj]<=t-map[i][j]) ans=max(ans,calc(ii,jj,i,j));
} int main(){
scanf("%d%d%d",&n,&m,&t);
for(int i=;i<=n;i++){
scanf("%s",s+);
for (int j=;j<=m;j++)
map[i][j]=s[j]-'';
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
spfa(i,j);
ch(i,j);
}
printf("%.6lf",ans);
}

【BZOJ 1295】 [SCOI2009]最长距离的更多相关文章

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

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

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

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

  3. BZOJ 1295: [SCOI2009]最长距离( 最短路 )

    把障碍点看做点(边)权为1, 其他为0. 对于每个点跑spfa, 然后和它距离在T以内的就可以更新答案 ------------------------------------------------ ...

  4. [BZOJ 1295][SCOI2009]最长距离(SPFA+暴力)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1295 分析:很巧妙的一道spfa从搜索的角度是搜索在所有1中搜索删除哪T个1,对整个图询问,这 ...

  5. bzoj 1295: [SCOI2009]最长距离 暴力+bfs最短路

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1295 题解: 对每个点暴力跑一遍bfs,看能够到达的最远位置,这里如果有障碍物则距离为1 ...

  6. 1295: [SCOI2009]最长距离

    1295: [SCOI2009]最长距离 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 960  Solved: 498[Submit][Status ...

  7. 【BZOJ】1295: [SCOI2009]最长距离(spfa+暴力)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1295 咳咳..此题我不会做啊..一开始认为是多源,可是有移除物品的操作,所以不行. 此题的思想很巧妙 ...

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

    思路:对于每个点出发bfs做一次dp, dp[ i ][ j ][ k ] 表示从枚举的该点能不能经过k个障碍物到达(i , j). #include<bits/stdc++.h> #de ...

  9. 1295. [SCOI2009]最长距离【最短路】

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

  10. [BZOJ1295][SCOI2009]最长距离 最短路+枚举

    1295: [SCOI2009]最长距离 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1683  Solved: 912[Submit][Statu ...

随机推荐

  1. hdu1501 动态规划

    这题有两种解题思路,一个是记忆化搜索,一个是dp. 分别贴代码: 记忆化搜索: #include<iostream> #include<cstdio> #include< ...

  2. Web Service 一些对外公开的网络服务接口

    商业和贸易: 1.股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) Endpoint: http://webservice.webxml.com.cn/WebSe ...

  3. C# 条形码识别

    目录: 一.识别库 二.从一张图片中提取多个条形码 三.注意事项 从博客园学了很多,本着分享的目的,希望后来者遇到类似问题时,不必重复造轮子,早点下班回家^-^. 一.识别库 目前主流的识别库主要有Z ...

  4. Git CMD - rm: Remove files from the working tree and from the index

    命令格式 git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…​ 命令参 ...

  5. Android第三方授权(QQ篇)

    QQ授权比微信授权相对来说会方便一些 同样需要去官网下载sdk和导入sdk到自己的工程 http://wiki.connect.qq.com/%E7%A7%BB%E5%8A%A8%E5%BA%94%E ...

  6. 如何检查mysql中建立的索引是否生效的检测方法及相关参数说明

    所使用的mysql函数explain语法:explain < table_name >例如: explain select * from t3 where id=3952602;expla ...

  7. 方法:怎么用ionic命令行调试你的ionic app

    官网上有很详细的解说  http://blog.ionic.io/live-reload-all-things-ionic-cli/ 下面说说我自己的调试过程(android版): 首先用命令行进入你 ...

  8. python pil 安装

    Ubuntu下 sudo pip install pil 安装PIL可能会出现问题,例如安装完成时显示JPEG support not available 或者 ZLIB (PNG/ZIP) supp ...

  9. 关于TCP的两个小练习_第一个博客~

    先来一个本地的,客户端发送请求,服务端接收请求的简单代码 1 package com.TCP.java; 2 3 import java.io.IOException; 4 import java.i ...

  10. 热键HotKeys

    一:新建类HotKeys命名空间: using System.Runtime.InteropServices; 二:注册热键API [DllImport("user32")] pu ...