B. Attack on Titan

链接

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<iostream>
  5. #include<cmath>
  6. #include<cctype>
  7. #include<set>
  8. #include<queue>
  9. #include<vector>
  10. #include<map>
  11. using namespace std;
  12. typedef long long LL;
  13.  
  14. inline int read() {
  15. int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
  16. for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
  17. }
  18.  
  19. const int N = ;
  20. const double g2 = sqrt(2.0), INF = 1e18, eps = 1e-;
  21. int dx[] = {, , -, , , , -, -};
  22. int dy[] = {, -, , , -, , -, };
  23. int nxt1[], nxt2[];
  24. bool vis[N][N][];
  25. double A[N][N], dis[N][N][], w[];
  26.  
  27. struct Node{
  28. int x, y, now; double dis;
  29. bool operator < (const Node &A) const { return dis > A.dis; }
  30. }tmp[];
  31. priority_queue< Node >q;
  32.  
  33. int main() {
  34. int n = read(), m = read(), C = read(), cnt = ;
  35. for (int i = ; i <= n; ++i)
  36. for (int j = ; j <= m; ++j) A[i][j] = read();
  37. for (int i = -; i <= ; ++i)
  38. for (int j = -; j <= ; ++j) {
  39. double v = i + j * g2;
  40. if (v >= && v <= C) w[++cnt] = v;
  41. }
  42. sort(w + , w + cnt + );
  43. for (int i = ; i <= cnt; ++i) {
  44. for (int j = i - ; ~j; --j) if (fabs(w[i] - w[j] - ) < eps) { nxt1[i] = j; break; }
  45. for (int j = i - ; ~j; --j) if (fabs(w[i] - w[j] - g2) < eps) { nxt2[i] = j; break; }
  46. }
  47. for (int i = ; i <= n; ++i)
  48. for (int j = ; j <= m; ++j)
  49. for (int k = ; k <= cnt; ++k) dis[i][j][k] = INF;
  50. dis[][][] = , q.push((Node){, , , });
  51. while (!q.empty()) {
  52. Node topp = q.top(); q.pop();
  53. int x = topp.x, y = topp.y, now = topp.now;
  54. if (vis[x][y][now]) continue;
  55. if (x == n && y == m) { printf("%.10lf",dis[x][y][now]); return ; }
  56. vis[x][y][now] = ;
  57. int t = ;
  58. if (w[now] + eps > ) {
  59. for (int i = ; i < ; ++i) {
  60. int nx = x + dx[i], ny = y + dy[i];
  61. if (nx >= && nx <= n && ny >= && ny <= m) tmp[++t] = (Node){nx,ny,nxt1[now],};
  62. }
  63. }
  64. if (w[now] + eps > g2) {
  65. for (int i = ; i < ; ++i) {
  66. int nx = x + dx[i], ny = y + dy[i];
  67. if (nx >= && nx <= n && ny >= && ny <= m) tmp[++t] = (Node){nx,ny,nxt2[now],};
  68. }
  69. }
  70. double d = dis[x][y][now];
  71. if(now<cnt) tmp[++t]=(Node){x,y,now+,(w[now+]-w[now])*A[x][y]};
  72. for (int i = ; i <= t; ++i) {
  73. if (dis[tmp[i].x][tmp[i].y][tmp[i].now] > d + tmp[i].dis)
  74. dis[tmp[i].x][tmp[i].y][tmp[i].now] = tmp[i].dis = d + tmp[i].dis, q.push(tmp[i]);
  75. }
  76. }
  77. return ;
  78. }

牛客国庆集训派对Day1 B. Attack on Titan的更多相关文章

  1. 牛客国庆集训派对Day1.B.Attack on Titan(思路 最短路Dijkstra)

    题目链接 \(Description\) 给定\(n,m,C\)及大小为\((n+1)(m+1)\)的矩阵\(c[i][j]\).平面上有\((n+1)(m+1)\)个点,从\((0,0)\)编号到\ ...

  2. 牛客国庆集训派对Day1 L-New Game!(最短路)

    链接:https://www.nowcoder.com/acm/contest/201/L 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...

  3. 牛客国庆集训派对Day1 L New Game!(堆优化dijkstra+建图)

    链接:https://ac.nowcoder.com/acm/contest/201/L来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言2097 ...

  4. 牛客国庆集训派对Day1 Solution

    A    Tobaku Mokushiroku Kaiji 水. #include <bits/stdc++.h> using namespace std; ], b[]; void Ru ...

  5. 2019牛客国庆集训派对day1(A, B E F K)

    链接:https://ac.nowcoder.com/acm/contest/1099#question A:可知符合条件的图中间肯定存在一个由1构成的矩形,找到由1构成矩形的边界,判断出现的1的数量 ...

  6. 牛客国庆集训派对Day1:J:Princess Principal(栈模拟求括号匹配)

    题目描述 阿尔比恩王国(the Albion Kingdom)潜伏着一群代号“白鸽队(Team White Pigeon)”的间谍.在没有任务的时候,她们会进行各种各样的训练,比如快速判断一个文档有没 ...

  7. 2019牛客国庆集训派对day1 K题 双向链表练习题 splay区间翻转

    题目链接: 解法: 先建n颗平衡树,合并的时候将a中最右的结点翻转到根节点,b中最左的结点翻转到根节点,对合并后的根节点进行标记. #include <bits/stdc++.h> usi ...

  8. 2019牛客国庆集训派对day1

    C 存每个值存在的位置,枚举末尾的值,再枚举前面的值,哈希二分出最长相同的,即剩下的为不同的 D \(f_{i,j,k}\)为前i位,最后一个3因子在j,次因子在k G bitset处理有多少位置符合 ...

  9. 牛客国庆集训派对Day6 A Birthday 费用流

    牛客国庆集训派对Day6 A Birthday:https://www.nowcoder.com/acm/contest/206/A 题意: 恬恬的生日临近了.宇扬给她准备了一个蛋糕. 正如往常一样, ...

随机推荐

  1. eclipse导入spring aop xml约束

    步骤: 1. 2. 3. 4.取  Location:中最后一个命名:spring-aop-4.2.xsd,放到Key的最后面,Key type:选择 Schema location.点击OK 5.编 ...

  2. [翻译] BAFluidView

    BAFluidView https://github.com/antiguab/BAFluidView This view and it's layer create a 2D fluid anima ...

  3. [原创]获取JS数组最大值、最小值

    核心关键 JS有Array数组对象,使用prototype内置属性扩展,增加Array数组max().min()方法 具体代码 //最小值 Array.prototype.min = function ...

  4. How To create extension in Hybris(创建Hybris的扩展)

    How To create extension in Hybris What is an extension? An extension is an encapsulated piece of the ...

  5. zhuangxiu

    红宝石家居广场国际家居馆 党湾综合市场(青年文明路)

  6. September 18th 2017 Week 38th Monday

    The only person you should try to be better than is the person you were yesterday. 你唯一应该试着去超越的人,是昨天的 ...

  7. 走向Node与Webpack 之路 - CommonJS 模块化

    走向Node与Webpack 之路 - CommonJS 模块化 1. 参考资料 JavaScript 标准参考教程(alpha) CommonJS规范(推荐 - 阮一峰写的) 官方网站 (看半天,不 ...

  8. 「GXOI / GZOI2019」旧词

    题目 确定这不是思博题 看起来很神仙,本来以为是\([LNOI2014]LCA\)的加强版,结果发现一个点的贡献是\(s_i\times (deep_i^k-(deep_i-1)^k)\),\(s_i ...

  9. React 入门学习笔记2

    摘自阮一峰:React入门实例教程,转载请注明出处. 一.获取真实的DOM节点 组件并不是真实的 DOM 节点,而是存在于内存之中的一种数据结构,叫做虚拟 DOM (virtual DOM).只有当它 ...

  10. Django输入 中文参数保存异常解决方法

    WEB页面输入中文后保存,出现异常     cmd.exe打印如下信息: UnicodeEncodeError: 'ascii' codec can't encode characters in po ...