【BZOJ 1295】 [SCOI2009]最长距离
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 。
#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]最长距离的更多相关文章
- BZOJ 1295: [SCOI2009]最长距离 spfa
1295: [SCOI2009]最长距离 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1295 Description windy有一块 ...
- bzoj 1295: [SCOI2009]最长距离
题目链接 1295: [SCOI2009]最长距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1165 Solved: 619[Submit][ ...
- BZOJ 1295: [SCOI2009]最长距离( 最短路 )
把障碍点看做点(边)权为1, 其他为0. 对于每个点跑spfa, 然后和它距离在T以内的就可以更新答案 ------------------------------------------------ ...
- [BZOJ 1295][SCOI2009]最长距离(SPFA+暴力)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1295 分析:很巧妙的一道spfa从搜索的角度是搜索在所有1中搜索删除哪T个1,对整个图询问,这 ...
- bzoj 1295: [SCOI2009]最长距离 暴力+bfs最短路
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1295 题解: 对每个点暴力跑一遍bfs,看能够到达的最远位置,这里如果有障碍物则距离为1 ...
- 1295: [SCOI2009]最长距离
1295: [SCOI2009]最长距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 960 Solved: 498[Submit][Status ...
- 【BZOJ】1295: [SCOI2009]最长距离(spfa+暴力)
http://www.lydsy.com/JudgeOnline/problem.php?id=1295 咳咳..此题我不会做啊..一开始认为是多源,可是有移除物品的操作,所以不行. 此题的思想很巧妙 ...
- bzoj 1295 1295: [SCOI2009]最长距离
思路:对于每个点出发bfs做一次dp, dp[ i ][ j ][ k ] 表示从枚举的该点能不能经过k个障碍物到达(i , j). #include<bits/stdc++.h> #de ...
- 1295. [SCOI2009]最长距离【最短路】
Description windy有一块矩形土地,被分为 N*M 块 1*1 的小格子. 有的格子含有障碍物. 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离. 如果从格 ...
- [BZOJ1295][SCOI2009]最长距离 最短路+枚举
1295: [SCOI2009]最长距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1683 Solved: 912[Submit][Statu ...
随机推荐
- POJ 3253 Fence Repair (贪心)
Fence Repair Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- 控制器view的延迟加载
- JavaScript常用的经典小技巧
1.屏蔽鼠标右键 <--body 方式--> <body oncontextmenu="window.event.returnValue=false"> & ...
- 初识Less(2015年05月23日)
因为最近在研究Bootstrap,然后才了解到Less,听说Less很强大,又听说Bootstrap+Less会更搭,所以就决定也顺带了解下Less的相关知识. come on...... 一.简介 ...
- AIDL实现Android IPC
1.AIDL文本解释 在软件工程中,接口定义语言(IDL)已经成为通用术语,是用来描述软件组件接口的特定语言.在Android中,该IDL被称为Android接口定义语言(AIDL),它是纯文本文件, ...
- html 文件动态加载.PDI 流程图
1 //javascript脚本 <script> window.onload = function () { var aid = document.getElementById(&quo ...
- 【译】在JavaScript中{}+{}的结果是什么?
原文链接:What is {} + {} in JavaScript? 最近,Gary Bernhardt在一个名为'Wat'的闪电演讲中提到了一些有趣的JavaScript技巧.当你把一个objec ...
- Java-IO 输入输出流详解
一.文件的编码 开发时一定要注意项目默认的编码!!!!!!!! 文件操作的时候一定要记得关闭!!!!!!!! ASCII:美国标准 ...
- 【转】fread函数和fwrite函数
1.函数功能 用来读写一个数据块. 2.一般调用形式 fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 3.说明 ( ...
- The C in C++
1 unnamed arguments in the argument list of the function definition (Page 114) In c++, an argument m ...