题解:

我脑子里都是翔???

bfs一下就行了 我居然还想什么kd tree!真是too naive,,,

 #include<cstdio>

 #include<cstdlib>

 #include<cmath>

 #include<cstring>

 #include<algorithm>

 #include<iostream>

 #include<vector>

 #include<map>

 #include<set>

 #include<queue>

 #include<string>

 #define inf 1000000000

 #define maxn 1000+5

 #define maxm 200000+5

 #define eps 1e-10

 #define ll long long

 #define pa pair<int,int>

 #define for0(i,n) for(int i=0;i<=(n);i++)

 #define for1(i,n) for(int i=1;i<=(n);i++)

 #define for2(i,x,y) for(int i=(x);i<=(y);i++)

 #define for3(i,x,y) for(int i=(x);i>=(y);i--)

 #define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)

 #define for5(n,m) for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)

 #define mod 1000000007

 using namespace std;

 inline int read()

 {

     int x=,f=;char ch=getchar();

     while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}

     while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}

     return x*f;

 }
int n,m,d[maxn][maxn];
queue<pa>q;
bool v[maxn][maxn];
const int dx[]={,,-,};
const int dy[]={,,,-}; int main() { freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); n=read();m=read();
for5(n,m)d[i][j]=inf;
for5(n,m)
{
char ch=getchar();
while(ch!=''&&ch!='')ch=getchar();
if(ch==''){d[i][j]=;q.push(pa(i,j));}
}
while(!q.empty())
{
int x=q.front().first,y=q.front().second;q.pop();
for0(i,)
{
int xx=x+dx[i],yy=y+dy[i];
if(xx<||xx>n||yy<||yy>m||d[xx][yy]<=d[x][y])continue;
d[xx][yy]=d[x][y]+;
if(!v[xx][yy]){v[xx][yy]=;q.push(pa(xx,yy));}
}
}
for1(i,n){for1(j,m)printf("%d ",d[i][j]);printf("\n");} return ; }
 #include<cstdio>

 #include<cstdlib>

 #include<cmath>

 #include<cstring>

 #include<algorithm>

 #include<iostream>

 #include<vector>

 #include<map>

 #include<set>

 #include<queue>

 #include<string>

 #define inf 1000000000

 #define maxn 2000000+5

 #define maxm 200000+5

 #define eps 1e-10

 #define ll long long

 #define pa pair<int,int>

 #define for0(i,n) for(int i=0;i<=(n);i++)

 #define for1(i,n) for(int i=1;i<=(n);i++)

 #define for2(i,x,y) for(int i=(x);i<=(y);i++)

 #define for3(i,x,y) for(int i=(x);i>=(y);i--)

 #define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)

 #define for5(n,m) for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)

 #define mod 1000000007

 using namespace std;

 inline int read()

 {

     int x=,f=;char ch=getchar();

     while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}

     while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}

     return x*f;

 }
int n,m,a[][],ans,rt,tot;
struct rec
{
int d[],mi[],mx[],l,r;
int& operator[](int i){return d[i];}
}now,t[maxn];
inline void pushup(int k)
{
int l=t[k].l,r=t[k].r;
for0(i,)
{
t[k].mi[i]=min(t[k].mi[i],min(t[l].mi[i],t[r].mi[i]));
t[k].mx[i]=max(t[k].mx[i],max(t[l].mx[i],t[r].mx[i]));
}
}
inline void insert(int &k,int dir)
{
if(!k)
{
k=++tot;t[tot]=now;
for0(i,)t[tot].mi[i]=t[tot].mx[i]=t[tot][i];
return;
}
if(now[dir]<t[k][dir])insert(t[k].l,dir^);else insert(t[k].r,dir^);
pushup(k);
}
inline int dist(rec a,rec b){return abs(a[]-b[])+abs(a[]-b[]);}
inline int get(int k)
{
if(!k)return inf;
int ret=;
for0(i,)
{
if(now[i]<t[k].mi[i])ret+=t[k].mi[i]-now[i];
if(now[i]>t[k].mx[i])ret+=now[i]-t[k].mx[i];
}
return ret;
}
inline void query(int k,int dir)
{
int dl=get(t[k].l),dr=get(t[k].r),d0=dist(t[k],now);
if(d0<ans)ans=d0;
if(dl<dr)
{
if(dl<ans)query(t[k].l,dir^);
if(dr<ans)query(t[k].r,dir^);
}else
{
if(dr<ans)query(t[k].r,dir^);
if(dl<ans)query(t[k].l,dir^);
}
}
int b[];
inline void print(int x)
{
if(!x)putchar('');
for(b[]=;x;x/=)b[++b[]]=x%;
for3(i,b[],)putchar(''+b[i]);
} int main() { freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); n=read();m=read();
for1(i,n)for1(j,m)
{
char ch=getchar();
while(ch!=''&&ch!='')ch=getchar();
a[i][j]=ch-'';
if(ch==''){now[]=i;now[]=j;insert(rt,);}
}
for1(i,n)
{
for1(j,m)
{
if(j!=)putchar(' ');
if(a[i][j]==)putchar('');
else {now[]=i;now[]=j;ans=inf;query(rt,);print(ans);}
}
printf("\n");
} return ; }

2252: [2010Beijing wc]矩阵距离

Time Limit: 10 Sec  Memory Limit: 256 MB
Submit: 529  Solved: 255
[Submit][Status]

Description

假设我们有矩阵,其元素值非零即1

a11…… a1m

…………….

an1…….anm

定义aij与akl之间的距离为D(aij,akl)=abs(i-k)+abs(j-L) 

Input

输入文件的第一行为两个整数,分别代表n和m。
接下来的n行,第i行的第 j个字符代表aij

Output

输出包含N行,每行M个用空格分开的数字,其中第i行第J个数字代表
Min(D(aij,axy) 1<=x<=N 1<=y<m,且axy=1

Sample Input

3 4
0001
0011
0110

Sample Output

3 2 1 0
2 1 0 0
1 0 0 1

HINT

对于100%的数据,满足 0 <  m n <=1000

BZOJ2252: [2010Beijing wc]矩阵距离的更多相关文章

  1. 【BFS】bzoj2252 [2010Beijing wc]矩阵距离

    要注意一开始将所有为'1'的点入队,然后通过一次BFS去更新所有点的距离,直到无法更新为止. #include<cstdio> #include<queue> #include ...

  2. Bzoj 2252: [2010Beijing wc]矩阵距离 广搜

    2252: [2010Beijing wc]矩阵距离 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 563  Solved: 274[Submit][ ...

  3. BZOJ 2252: [2010Beijing wc]矩阵距离

    题目 2252: [2010Beijing wc]矩阵距离 Time Limit: 10 Sec  Memory Limit: 256 MB Description 假设我们有矩阵,其元素值非零即1 ...

  4. bzoj 2252 [ 2010 Beijing wc ] 矩阵距离 —— 多源bfs

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2252 又没能自己想出来... 一直在想如何从每个1开始广搜更新答案,再剪剪枝,什么遇到1就不 ...

  5. bzoj 2251: [2010Beijing Wc]外星联络 后缀数组

    2251: [2010Beijing Wc]外星联络 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 424  Solved: 232[Submit][ ...

  6. BZOJ 2251: [2010Beijing Wc]外星联络

    2251: [2010Beijing Wc]外星联络 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 795  Solved: 477[Submit][ ...

  7. 【BZOJ2251】[2010Beijing Wc]外星联络 后缀数组

    [BZOJ2251][2010Beijing Wc]外星联络 Description 小 P 在看过电影<超时空接触>(Contact)之后被深深的打动,决心致力于寻找外星人的事业.于是, ...

  8. 2251: [2010Beijing Wc]外星联络

    2251: [2010Beijing Wc]外星联络 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 801  Solved: 481[Submit][ ...

  9. BZOJ_2251_[2010Beijing Wc]外星联络_后缀数组

    BZOJ_2251_[2010Beijing Wc]外星联络_后缀数组 Description 小 P 在看过电影<超时空接触>(Contact)之后被深深的打动,决心致力于寻 找外星人的 ...

随机推荐

  1. [转载]C#时间函数

    本文转自livedanta的博客的<C#时间函数> DateTime DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21 ...

  2. c++ std::string 用法

    std::string用法总结 在平常工作中经常用到了string类,本人记忆了不好用到了的时候经常要去查询.在网上摘抄一下总结一下,为以后的查询方便: string类的构造函数: string(co ...

  3. uoj 67 新年的毒瘤 割点

    题目链接: 题目 #67. 新年的毒瘤 问题描述 辞旧迎新之际,喜羊羊正在打理羊村的绿化带,然后他发现了一棵长着毒瘤的树. 这个长着毒瘤的树可以用 nn 个结点 mm 条无向边的无向图表示.这个图中有 ...

  4. ?--Porg.springframework.beans.MethodInvocationException: Property 'username' threw exception; nested exception is java.lang.NullPointerException

    使用BoneCP作为连接池,在启动Tomcat报出以下异常: 一月 02, 2016 2:12:17 下午 org.apache.tomcat.util.digester.SetPropertiesR ...

  5. 【BZOJ】【1965】SHUFFLE 洗牌

    扩展欧几里德+快速幂 每次转换位置:第x位的转移到2*x %(n+1)这个位置上 那么m次后就到了(2^m)*x %(n+1)这个位置上 那么找洗牌m次后在 l 位置上的牌就相当于解线性模方程: (2 ...

  6. 《head first java 》读书笔记(二)

    Updated 2014/03/27 P402-P454 Updated 2014/04/03 P454- 世界三大首席管理器: border, flow, box borderLayout: 五个区 ...

  7. Root resource classes

    Overview A root resource class is the entry point into a JAX-RS implemented RESTful Web service. It ...

  8. 2010年山东省第一届ACM大学生程序设计竞赛 Balloons (BFS)

    题意 : 找联通块的个数,Saya定义两个相连是 |xa-xb| + |ya-yb| ≤ 1 ,但是Kudo定义的相连是 |xa-xb|≤1 并且 |ya-yb|≤1.输出按照两种方式数的联通块的各数 ...

  9. 02 - Tomcat配置

    Tomcat配置 本文内容 介绍 Windows UNIX daemon 1.介绍 首选看Tomcat目录下的RUNNING.TXT 2.Windows平台下 可以选择下载windows instal ...

  10. 用Delphi创建服务程序

    用Delphi创建服务程序 日期:2005年11月29日 作者:sunmohe 人气: 3154 查看:[大字体 中字体 小字体] Windows 2000/XP和2003等支持一种叫做"服 ...