浙江第四届省赛第一题
来源:互联网 发布:软件开发行业发展方向 编辑:程序博客网 时间:2024/04/28 03:49
#include <iostream>#include <queue>#include <stdio.h>#include <algorithm>#include <string.h>using namespace std;#define inf 10000000int n, m;int dir[4][2] = {0, -1, 0, 1, 1, 0, -1, 0};int ans[5000000 + 5];int mp[1000 + 5][1000 + 5];typedef struct Node{ int level; int type; int sx, sy; friend bool operator< (Node n1, Node n2){ if(n1.level == n2.level) return n1.type > n2.type; return n1.level > n2.level; }};priority_queue<Node> q;void bfs(){ Node s, e; while(!q.empty()){ s = q.top(); q.pop(); int tmp = -inf; for(int i = 0; i < 4; i++){ int dx = s.sx + dir[i][0]; int dy = s.sy + dir[i][1]; if(dx < 0 || dx >= n || dy < 0 || dy >= m) continue; if(mp[dx][dy] > 0) continue; if(mp[dx][dy] + s.level >= 0){ e.sx = dx; e.sy = dy; e.type = s.type; ans[s.type]++; e.level = s.level; mp[dx][dy] = s.type; q.push(e); } else if(mp[dx][dy] > tmp) tmp = mp[dx][dy]; } if(tmp != -inf){ s.level = -tmp; q.push(s); } }}int main(){ while(scanf("%d %d", &n, &m) != EOF){ memset(ans, 0, sizeof(ans)); memset(mp, 0, sizeof(mp)); for(int i = 0; i < n; i++) for(int j = 0; j < m; j++){ scanf("%d", &mp[i][j]); if(mp[i][j] > 0){ Node node; node.sx = i; node.sy = j; node.type = mp[i][j]; node.level = 1; q.push(node); ans[mp[i][j]]++; } } bfs(); int Q; scanf("%d", &Q); int a; for(int i = 0; i < Q; i++){ scanf("%d", &a); printf("%d\n", ans[a]); } } return 0;}
0 0
- 浙江第四届省赛第一题
- 第四章第一题
- 第四章第一题
- 第四届蓝桥杯第一题
- 浙江大华笔试题
- 浙江大华笔试题
- 疯狂java讲义第四章第一题
- 学习OpenCV第四章第一题答案
- 第一层第四题:打断项链
- Java之網易云課堂_浙江大學翁凱_第一週編程作業
- 第37课第四题&第38课第一题
- 《学习OpenCV》练习题第四章第一题a
- 《学习OpenCV》练习题第四章第一题b&c
- 《Career Cup Top 150 Questions》第四章第一题
- 第四届蓝桥杯 软件类省赛真题 第一题:猜年龄
- 蓝桥杯java第四届决赛第一题--猜灯谜
- 浙江大华2012笔试题+答案解析
- 浙江大华2012笔试题+答案解析
- Android简单相机开发
- 常用Oracle语句
- httpRequest
- revit获取当前模型中板的数量
- 外卖-----高并发架构设计方案
- 浙江第四届省赛第一题
- stm32中的adc多次采样求均值减少误差的方法
- Spring框架的七大模块
- Stack的应用——Binary Tree Preorder Traversal
- JavaScript中 this 的指向
- c++直方图均衡化源码
- C++--编译器工作原理
- Lesson 40 Food and talk
- Web开发后端:JDK基本语法(一)