http://codeforces.com/contest/1064/problem/D

向上/向下加0,向左/右加1,

step = 0,1,……

求的是最少的步数,所以使用bfs。

step=k -> step=k+1

1.step=k 使用一次左/右 到达 step=k+1

2.step=k+1 无限使用上下,得到所有 step=k+1 的状态

用dijkstra+堆优化 / spfa 超时。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define minv 1e-6
  5. #define inf 1e9
  6. #define pi 3.1415926536
  7. #define nl 2.7182818284
  8. const ll mod=1e9+;//
  9. const int maxn=(2e3+)*(2e3+);
  10.  
  11. int q[maxn],step[maxn];
  12. char s[maxn];
  13. int n,m,bx,by,gl,gr,head,tail,phead,i,sum=,l,r,d;
  14.  
  15. void add(int d,int pos,int k)
  16. {
  17. tail++;
  18. q[tail]=d;
  19. s[d]='*';
  20. step[tail]=step[pos]+k;
  21. r=(d%m-by+step[tail])/;
  22. l=step[tail]-r;
  23. if (l<=gl && r<=gr)
  24. sum++;
  25. }
  26.  
  27. int main()
  28. {
  29. scanf("%d%d",&n,&m);
  30. scanf("%d%d",&bx,&by);
  31. scanf("%d%d",&gl,&gr);
  32. bx--,by--,sum++;
  33. q[]=bx*m+by;
  34. for (i=;i<=n;i++)
  35. scanf("%s",s+(i-)*m);
  36. s[q[]]='*';
  37. head=,tail=;
  38. while (head<=tail)
  39. {
  40. phead=head;
  41. while (head<=tail)
  42. {
  43. d=q[head]-m;
  44. if (d>= && s[d]=='.')
  45. add(d,head,);
  46. d=q[head]+m;
  47. if (d<n*m && s[d]=='.')
  48. add(d,head,);
  49. head++;
  50. }
  51. //[phead,tail] (head-1)
  52. while (phead<head)
  53. {
  54. d=q[phead]-;
  55. if (d%m!=m- && s[d]=='.')
  56. add(d,phead,);
  57. d=q[phead]+;
  58. if (d%m!= && s[d]=='.')
  59. add(d,phead,);
  60. phead++;
  61. }
  62. }
  63. printf("%d",sum);
  64. return ;
  65. }

Codeforces Round #516 (Div. 2, by Moscow Team Olympiad) D. Labyrinth的更多相关文章

  1. Codeforces Round #516 (Div. 2, by Moscow Team Olympiad) D. Labyrinth(重识搜索)

    https://codeforces.com/contest/1064/problem/D 题意 给你一个有障碍的图,限制你向左向右走的次数,问你可以到达格子的个数 思路 可以定义状态为vi[x][y ...

  2. Codeforces Round #516 (Div. 2, by Moscow Team Olympiad)

    题目链接 A. Make a triangle! 题意 让某段最少增加多少使得构成三角形 思路 让较小两段往最长段去凑 代码 #include <bits/stdc++.h> #defin ...

  3. [Codeforces Round #516 (Div. 2, by Moscow Team Olympiad) ](A~E)

    A: 题目大意:给你$a,b,c$三条边,可以给任意的边加任意的长度,求最少共加多少长度使得可以构成三角形 题解:排个序,若可以组成,输出$0$,否则输出$c-a-b+1(设a\leqslant b\ ...

  4. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) D. Sorting the Coins

    http://codeforces.com/contest/876/problem/D 题意: 最开始有一串全部由"O"组成的字符串,现在给出n个数字,指的是每次把位置n上的&qu ...

  5. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) C. Classroom Watch

    http://codeforces.com/contest/876/problem/C 题意: 现在有一个数n,它是由一个数x加上x每一位的数字得到的,现在给出n,要求找出符合条件的每一个x. 思路: ...

  6. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) B. Divisiblity of Differences

    http://codeforces.com/contest/876/problem/B 题意: 给出n个数,要求从里面选出k个数使得这k个数中任意两个的差能够被m整除,若不能则输出no. 思路: 差能 ...

  7. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) A. Trip For Meal

    http://codeforces.com/contest/876/problem/A 题意: 一个人一天要吃n次蜂蜜,他有3个朋友,他第一次总是在一个固定的朋友家吃蜂蜜,如果说没有吃到n次,那么他就 ...

  8. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)

    A. Trip For Meal 题目链接:http://codeforces.com/contest/876/problem/A 题目意思:现在三个点1,2,3,1-2的路程是a,1-3的路程是b, ...

  9. CF Round #516 (Div. 2, by Moscow Team Olympiad)

    前言:依旧菜,\(A\)了\(4\)题,不过这次上蓝了挺开心的. A. Make a triangle! Description 给出\(3\)根木棍,希望用它们拼成三角形,可以将其中的某些木棍增长, ...

随机推荐

  1. react-创建react元素

    前言 react 元素,即JSX语法. const Nav, Profile; // 输入(JSX): const app = <Nav color="blue">&l ...

  2. 第六周分析Linux内核创建一个新进程的过程

    潘恒 原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 task_struct结构: ...

  3. js异步回调

    简单理解:js是单线程的,Ajax请求远程数据.IO等会很耗时,引起堵塞可能会引起反应时间太长页面失去反应. 回调:A函数作为一个参数传给B函数,执行完B后再执行A: 同步回调: function A ...

  4. synchronized关键字的学习与总结

  5. JProfiler的使用

    1.下载地址:http://www.ej-technologies.com/download/jprofiler/files 2.使用过程 1.点击此图的new Session 2.点击左边appli ...

  6. mysql数据库忘记密码时如何修改

    工具/原料 mysql数据库 cmd命令行 打开mysql.exe和mysqld.exe所在的文件夹,复制路径地址 打开cmd命令提示符,进入上一步mysql.exe所在的文件夹

  7. AWS、Azure和Google的云容器注册表有什么区别?

    亚马逊云计算服务(AWS).谷歌云服务和微软Azure,这三大公共云平台都提供Docker容器注册表.虽然他们的产品看起来很相似,但开发人员在做出选择之前,应该先了解价格和功能方面的差异. 公共云供应 ...

  8. git如何拉取指定分支的代码

    问题背景: 新项目还在开发阶段,没有正式对外发布,所以开发同事合并代码到develop上(或者其他名称分支上),而不是到master分支上 通过git拉取代码的时候,默认拉取的是master分支,如下 ...

  9. BZOJ2157旅游——树链剖分+线段树

    题目描述 Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有一条路 ...

  10. c#计算 坐标点与坐标点之间的距离

    PointF p = new PointF(116.305671f, 39.966051f); PointF p2 = new PointF(116.595428f, 39.828327f); dou ...