2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛 A题题解
链接: https://www.nowcoder.com/acm/contest/118/A
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
输入描述:
题目包含多组测试,请处理到文件结束; 第一行是一个整数n,代表地图的大小; 接下来的n行中,每行包含n个整数a,每个数字a代表当前位置敌人的数量; 1 < n <= 100,1 <= a <= 100,-1代表当前位置,-2代表安全区。
输出描述:
对于每组测试数据,请输出从当前位置到安全区所遇到最少的敌人数量,每个输出占一行。
链接: https://www.nowcoder.com/acm/contest/118/A
来源:牛客网
输入
5 6 6 0 -2 3 4 2 1 2 1 2 2 8 9 7 8 1 2 1 -1 9 7 2 1 2
输出
9
输入
5 62 33 18 -2 85 85 73 69 59 83 44 38 84 96 55 -1 11 90 34 50 19 73 45 53 95
输出
173
思路:求从原点到目标点遇见最少的人数,利用BFS,以最短路径的方式,既然要求遇见最少的人数,每次应该是当前位置的周围有最少人数的位置入队,利用优先队列可以实现。
AC代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int MAXN = 110;
const int INF = 0x3f3f3f3f;
int mp[MAXN][MAXN];
int n;
int si,sj,ei,ej;
int dp[MAXN][MAXN];
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
typedef pair<int,int> P;
bool used[MAXN][MAXN];
struct node {int x;int y;int val;
};
struct cmp{bool operator () (node f1, node f2) // 重载括号{return f1.val>=f2.val; }
};
priority_queue<node,vector<node>,cmp > que;
void bfs(){int i,j;while(!que.empty()){node a = que.top();que.pop();i=a.x;j=a.y;used[i][j]=true;if(i==ei && j==ej){return ;}for(int k=0;k<4;k++){int di=i+dir[k][0];int dj=j+dir[k][1];if(di>=0 && di<n && dj>=0 && dj<n && used[di][dj]==false){dp[di][dj]=dp[i][j]+mp[di][dj];used[di][dj]=true;que.push((node){di,dj, dp[di][dj]}); }}}
}
void sovle(){while(!que.empty()){que.pop();}for (int i = 0; i <= n; ++i)for (int j = 0; j <= n; ++j) dp[i][j] = INF;memset(used,false,sizeof(used));dp[si][sj]=0;que.push((node){si,sj, 0});used[si][sj]=true;bfs();printf("%d\n",dp[ei][ej]+2);
}
int main(){while(~scanf("%d",&n)){for(int i=0;i<n;i++){for(int j=0;j<n;j++){scanf("%d",&mp[i][j]);if(mp[i][j]==-1){si=i;sj=j;}if(mp[i][j]==-2){ei=i;ej=j;}}}sovle();}return 0;
}
2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛 A题题解相关推荐
- 2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛题解
链接:https://www.nowcoder.com/acm/contest/118/A 来源:牛客网 PUBG 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...
- 2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛 H 程序员的好印象
题意: 有一个0,1的序列,当你出现1之后就不能在出现0了,问你最长的子序列长度是多少 思路:0 0 0 1 1 1 ,1之后不能出现0了,那其实就是最长上升子序列啊没了... 代码: #inclu ...
- 北京信息科技大学第十三届程序设计竞赛暨ACM选拔赛题解
北京信息科技大学第十三届程序设计竞赛暨ACM选拔赛题解 A lzh的蹦床 B 所谓过河 C 旅行家问题1 D 旅行家问题2 E 小菲和Fib数列 F 好玩的音乐游戏 G ranko的手表 H 字母收集 ...
- 北京信息科技大学第十二届程序设计竞赛暨ACM选拔赛题解
A 爱丽丝的人偶(一) 链接:https://ac.nowcoder.com/acm/contest/8755/A 题目描述 爱丽丝有个人偶,每个人偶的身高依次是 现在她要将这个人偶摆成一排. 但是人 ...
- 北京信息科技大学第十三届程序设计竞赛暨ACM选拔赛(重现赛)题解
题目链接: 北京信息科技大学第十三届程序设计竞赛暨ACM选拔赛(重现赛)_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ大学ACM校赛新生赛是面向ACM/ICPC/CCP ...
- E-游戏机本当下手(北京信息科技大学第十二届程序设计竞赛暨ACM选拔赛)
游戏机本当下手 题目: 藤原妹红拿到了一个游戏机,游戏机上有'1'和'0'两个按钮. 妹红发现,只要按住某个按钮不放,屏幕上就能一直不断打印那个字符. 比如对于"11111111100000 ...
- 北京信息科技大学第十二届程序设计竞赛暨ACM选拔赛(同步赛)
A .爱丽丝的人偶(一) 链接:https://ac.nowcoder.com/acm/contest/8755/A 来源:牛客网 题目描述 爱丽丝有n个人偶,每个人偶的身高依次是 1,2,3,-n ...
- 海淀区第九届单片机竞赛获奖名单_第十二届程序设计竞赛暨ACM选拔赛获奖名单...
11月21日由北京信息科技大学ACM集训队主办,计算机学院承办,牟永敏老师指导的第十二届程序设计竞赛暨ACM选拔赛完美落幕.本次比赛的参赛队员来自北信科的各个学院的同学共同参与,共142人报名参与此次 ...
- 浙江农林大学第二十届程序设计竞赛暨团体程序设计天梯赛选拔赛(同步赛) K.来自良心出题人wzc的简单题
链接 来源:牛客网 题目描述 罗德岛训练室今天的使用人是干员w,她的任务是使用手上的三个遥控炸弹,尽可能摧毁最大价值的目标. 测试区域是一个nn的矩阵,w可以选择任意格子安放炸弹,如果选择了位置[i] ...
最新文章
- Redis Key资源占用情况的可视化分析
- php short_open_tag asp_tags
- hsrp热备路由协议实验
- 本科985末端去哪学计算机好,4所“985高校”,录取分较低,常被拿来捡漏!
- 玩转UITableView
- java怎么看dao文件_java通过实体类生成dao文件
- P1460 健康的荷斯坦奶牛 Healthy Holsteins (简单的dfs)
- 每日一题:leetcode82. 删除排序链表中的重复元素 II
- 临时关闭七八十家店!茶颜悦色:我们还撑得住
- python 运行时间计算_python计算一段代码的运行时间(类和函数)
- 天猫精灵 AIoT 平台将研发门槛从1000万降至40万,缩减 3 倍研发周期
- Greenplu数据库的部署
- vue项目基本环境的配置与初始化
- httpclient4.3+jsoup模拟登陆河北移动
- html 数字加圆圈,word中圆圈数字,圆圈11怎么打
- 汽机电调控制器505E运行操作手册
- centos7 定时清理内存
- LINUX下浮点运算
- Linux resolv.conf 简介
- 5G商用牌照正式发放!万亿级市场大门开启
热门文章
- TensorHouse仓库介绍
- 吴昊品游戏核心算法 Round 17 —— 吴昊教你玩拼图游戏(8 puzzle)
- androidX 在AndroidMainfest里面加入provider后编译不通过
- java自动生成 rap接口_GitHub - XiaoweiM/rap2-javabean: rap2生成javabean
- 英文论文中“such as, for example, e.g., i.e., etc., et al. ”的用法分析
- 基于python实现类似qq群聊功能
- 给初中级JAVA准备的面试题
- android BT 遥控器配置
- JavaScript输出语句console.log输出换行代码
- 鲸探发布点评:7月21日发售辟邪、唐风汉韵、马首圣银壶数字藏品