题解:

我脑子里都是翔???

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

  1. #include<cstdio>
  2.  
  3. #include<cstdlib>
  4.  
  5. #include<cmath>
  6.  
  7. #include<cstring>
  8.  
  9. #include<algorithm>
  10.  
  11. #include<iostream>
  12.  
  13. #include<vector>
  14.  
  15. #include<map>
  16.  
  17. #include<set>
  18.  
  19. #include<queue>
  20.  
  21. #include<string>
  22.  
  23. #define inf 1000000000
  24.  
  25. #define maxn 1000+5
  26.  
  27. #define maxm 200000+5
  28.  
  29. #define eps 1e-10
  30.  
  31. #define ll long long
  32.  
  33. #define pa pair<int,int>
  34.  
  35. #define for0(i,n) for(int i=0;i<=(n);i++)
  36.  
  37. #define for1(i,n) for(int i=1;i<=(n);i++)
  38.  
  39. #define for2(i,x,y) for(int i=(x);i<=(y);i++)
  40.  
  41. #define for3(i,x,y) for(int i=(x);i>=(y);i--)
  42.  
  43. #define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)
  44.  
  45. #define for5(n,m) for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)
  46.  
  47. #define mod 1000000007
  48.  
  49. using namespace std;
  50.  
  51. inline int read()
  52.  
  53. {
  54.  
  55. int x=,f=;char ch=getchar();
  56.  
  57. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  58.  
  59. while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
  60.  
  61. return x*f;
  62.  
  63. }
  64. int n,m,d[maxn][maxn];
  65. queue<pa>q;
  66. bool v[maxn][maxn];
  67. const int dx[]={,,-,};
  68. const int dy[]={,,,-};
  69.  
  70. int main()
  71.  
  72. {
  73.  
  74. freopen("input.txt","r",stdin);
  75.  
  76. freopen("output.txt","w",stdout);
  77.  
  78. n=read();m=read();
  79. for5(n,m)d[i][j]=inf;
  80. for5(n,m)
  81. {
  82. char ch=getchar();
  83. while(ch!=''&&ch!='')ch=getchar();
  84. if(ch==''){d[i][j]=;q.push(pa(i,j));}
  85. }
  86. while(!q.empty())
  87. {
  88. int x=q.front().first,y=q.front().second;q.pop();
  89. for0(i,)
  90. {
  91. int xx=x+dx[i],yy=y+dy[i];
  92. if(xx<||xx>n||yy<||yy>m||d[xx][yy]<=d[x][y])continue;
  93. d[xx][yy]=d[x][y]+;
  94. if(!v[xx][yy]){v[xx][yy]=;q.push(pa(xx,yy));}
  95. }
  96. }
  97. for1(i,n){for1(j,m)printf("%d ",d[i][j]);printf("\n");}
  98.  
  99. return ;
  100.  
  101. }
  1. #include<cstdio>
  2.  
  3. #include<cstdlib>
  4.  
  5. #include<cmath>
  6.  
  7. #include<cstring>
  8.  
  9. #include<algorithm>
  10.  
  11. #include<iostream>
  12.  
  13. #include<vector>
  14.  
  15. #include<map>
  16.  
  17. #include<set>
  18.  
  19. #include<queue>
  20.  
  21. #include<string>
  22.  
  23. #define inf 1000000000
  24.  
  25. #define maxn 2000000+5
  26.  
  27. #define maxm 200000+5
  28.  
  29. #define eps 1e-10
  30.  
  31. #define ll long long
  32.  
  33. #define pa pair<int,int>
  34.  
  35. #define for0(i,n) for(int i=0;i<=(n);i++)
  36.  
  37. #define for1(i,n) for(int i=1;i<=(n);i++)
  38.  
  39. #define for2(i,x,y) for(int i=(x);i<=(y);i++)
  40.  
  41. #define for3(i,x,y) for(int i=(x);i>=(y);i--)
  42.  
  43. #define for4(i,x) for(int i=head[x],y=e[i].go;i;i=e[i].next,y=e[i].go)
  44.  
  45. #define for5(n,m) for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)
  46.  
  47. #define mod 1000000007
  48.  
  49. using namespace std;
  50.  
  51. inline int read()
  52.  
  53. {
  54.  
  55. int x=,f=;char ch=getchar();
  56.  
  57. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  58.  
  59. while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
  60.  
  61. return x*f;
  62.  
  63. }
  64. int n,m,a[][],ans,rt,tot;
  65. struct rec
  66. {
  67. int d[],mi[],mx[],l,r;
  68. int& operator[](int i){return d[i];}
  69. }now,t[maxn];
  70. inline void pushup(int k)
  71. {
  72. int l=t[k].l,r=t[k].r;
  73. for0(i,)
  74. {
  75. t[k].mi[i]=min(t[k].mi[i],min(t[l].mi[i],t[r].mi[i]));
  76. t[k].mx[i]=max(t[k].mx[i],max(t[l].mx[i],t[r].mx[i]));
  77. }
  78. }
  79. inline void insert(int &k,int dir)
  80. {
  81. if(!k)
  82. {
  83. k=++tot;t[tot]=now;
  84. for0(i,)t[tot].mi[i]=t[tot].mx[i]=t[tot][i];
  85. return;
  86. }
  87. if(now[dir]<t[k][dir])insert(t[k].l,dir^);else insert(t[k].r,dir^);
  88. pushup(k);
  89. }
  90. inline int dist(rec a,rec b){return abs(a[]-b[])+abs(a[]-b[]);}
  91. inline int get(int k)
  92. {
  93. if(!k)return inf;
  94. int ret=;
  95. for0(i,)
  96. {
  97. if(now[i]<t[k].mi[i])ret+=t[k].mi[i]-now[i];
  98. if(now[i]>t[k].mx[i])ret+=now[i]-t[k].mx[i];
  99. }
  100. return ret;
  101. }
  102. inline void query(int k,int dir)
  103. {
  104. int dl=get(t[k].l),dr=get(t[k].r),d0=dist(t[k],now);
  105. if(d0<ans)ans=d0;
  106. if(dl<dr)
  107. {
  108. if(dl<ans)query(t[k].l,dir^);
  109. if(dr<ans)query(t[k].r,dir^);
  110. }else
  111. {
  112. if(dr<ans)query(t[k].r,dir^);
  113. if(dl<ans)query(t[k].l,dir^);
  114. }
  115. }
  116. int b[];
  117. inline void print(int x)
  118. {
  119. if(!x)putchar('');
  120. for(b[]=;x;x/=)b[++b[]]=x%;
  121. for3(i,b[],)putchar(''+b[i]);
  122. }
  123.  
  124. int main()
  125.  
  126. {
  127.  
  128. freopen("input.txt","r",stdin);
  129.  
  130. freopen("output.txt","w",stdout);
  131.  
  132. n=read();m=read();
  133. for1(i,n)for1(j,m)
  134. {
  135. char ch=getchar();
  136. while(ch!=''&&ch!='')ch=getchar();
  137. a[i][j]=ch-'';
  138. if(ch==''){now[]=i;now[]=j;insert(rt,);}
  139. }
  140. for1(i,n)
  141. {
  142. for1(j,m)
  143. {
  144. if(j!=)putchar(' ');
  145. if(a[i][j]==)putchar('');
  146. else {now[]=i;now[]=j;ans=inf;query(rt,);print(ans);}
  147. }
  148. printf("\n");
  149. }
  150.  
  151. return ;
  152.  
  153. }

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. 关于拓扑排序(topologicalsort)

    假设我们有一组任务要完成,并且有些任务要在其它任务完成之后才能开始,所以我们必须非常小心这些任务的执行顺序.如果这些任务的执行顺序足够简单的话,我们可以用链表来存储它们,这是一个很好的方案,让我们可以 ...

  2. nginx 如何显示真实ip

    nginx做反向代理显示在后台访问的真实ip总是显示127.0.0.1 只要添加如下内容:   proxy_set_header Host $host;  proxy_set_header X-For ...

  3. 为什么数据可以从pl/sql查出来而使用ado.net查询,结果却是空?

    1.背景 一条记录(如select * from A where a='1'),使用pl/sql作为条件可以查询出记录,但用ado.net sql查询结果却是空. 2.原因 a字段的数据类型的char ...

  4. C++字符串分割

    //字符串分割函数 std::vector<std::string> split(std::string str,std::string pattern) { std::string::s ...

  5. Linux下tcp协议socket的recv函数返回时机分析(粘包)

    http://www.vckbase.com/index.php/wv/10http://blog.csdn.net/zlzlei/article/details/7689409 文章一: 当前在网络 ...

  6. xargs 加 gm批量转换图片

    %x50% @ ../-\ 南澳西涌_50%/@ 看了很多说明上都在用-i,这是一个已经废弃了的参数

  7. Unity3D 相关项目代码

    一.Application.PresistentDataPath 注意最后面是没有/的 public static string PresistentDataPathForEditor = " ...

  8. HDU4612 Warm up 边双连通分量&&桥&&树直径

    题目的意思很简单,给你一个已经连通的无向图,我们知道,图上不同的边连通分量之间有一定数量的桥,题目要求的就是要你再在这个图上加一条边,使得图的桥数目减到最少. 首先要做的就是找出桥,以及每个点所各自代 ...

  9. hdu 2717 Catch That Cow(BFS,剪枝)

    题目 #include<stdio.h> #include<string.h> #include<queue> #include<algorithm> ...

  10. Orcle数据库查询练习复习:四

    一.题目 1.找出张三的最高分和最低分以及对应的课程名 select * from course c,mark m where c.cid=m.cid and sid =(select sid fro ...