题解:

我脑子里都是翔???

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. android studio 不能在线更新android SDK Manager问题解决办法

    Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml, reason: Connecti ...

  2. OpenCV之mixChannels()函数使用说明

    step 1: 函数功能说明 mixChannels主要就是把输入的矩阵(或矩阵数组)的某些通道拆分复制给对应的输出矩阵(或矩阵数组)的某些通道中,其中的对应关系就由fromTo参数制定. step ...

  3. FTP操作类(支持异步)

    public delegate void DownloadProgressChangedEventHandle(string information, long currentprogress, lo ...

  4. 传说中的Markov"不过如此”

    因为看一篇题为 Passive Measurement of Interference in WiFi Network with Application in Misbehavior Detectio ...

  5. setjmp和longjmp的使用

    问题描述:          setjmp和longjmp的使用 问题解决:       setjmp和longjmp是C语言独有的,只有将它们结合起来使用,才能达到程序控制流有效转移的目的,按照程序 ...

  6. 1-Highcharts环境介绍及配置

    Highcharts:功能强大.开源.美观.图表丰富.兼容绝大多数浏览器的纯js图表库,废话不多说,直接进入主题! 首先,下载Highcharts包文件,下载地址如下: 中文网下载中心:http:// ...

  7. 解谜谷歌 DevOps:什么特质可以打造世界级可靠系统?

    [编者按]本文是 Gene Kim 总结自对 Randy Shoup 两个小时的采访,主要关注谷歌 DevOps 的提升之道.本文系 OneAPM联合高效运维编译整理. Randy Shoup 曾协助 ...

  8. POJ 1417 True Liars(种类并查集+dp背包问题)

    题目大意: 一共有p1+p2个人,分成两组,一组p1,一组p2.给出N个条件,格式如下: x y yes表示x和y分到同一组,即同是好人或者同是坏人. x y no表示x和y分到不同组,一个为好人,一 ...

  9. HDU 1598 find the most comfortable road(枚举+并查集,类似于最小生成树)

    一开始想到用BFS,写了之后,发现有点不太行.网上查了一下别人的解法. 首先将边从小到大排序,然后从最小边开始枚举,每次取比它大的边,直到start.end属于同一个集合,即可以连通时停止.过程类似于 ...

  10. Fragment (一)

      1,简介 Fragement(碎片)允许将Activity拆分成多个完全独立封装的可重用组件,每个组件有它自己的生命周期和UI布局,由此可见,Fragement依赖于Activity,它的生命周期 ...