第六届华为创新杯编程大赛-进阶1第1轮 洞穴逃生 (bfs + 优先队列)
这个题容易出错想了挺长时间,然后代码不长,1Y..
做完题,看了一下别人的博客,也可以优先用 闪烁法术, 在闪烁法术不不如跑步的阶段(即魔法恢复的时候)用跑步。
| 洞穴逃生 | |
| 描述: |
精灵王子爱好冒险,在一次探险历程中,他进入了一个神秘的山洞。在洞穴深处,精灵王子不小心触动了洞穴内暗藏的机关,整个洞穴将很快塌陷,精灵王子必须尽快逃离洞穴。精灵王子的跑步速度为17m/s,以这样的速度可能是无法逃出洞穴的。庆幸的是精灵王子拥有闪烁法术,可在1s内移动60m,不过每次使用闪烁法术都会消耗魔法值10点。精灵王子的魔法值恢复的速度为4点/s,只有处在原地休息状态时才能恢复。 现在已知精灵王子的魔法初值M,他所在洞穴中的位置与洞穴出口之间的距离S,距离洞穴塌陷的时间T。你的任务是写一个程序帮助精灵王子计算如何在最短的时间内逃离洞穴。若能逃出,输出"Yes",并输出逃出所用的最短时间;若不能逃出,则输出"No",同时输出精灵王子在剩下的时间内能走的最远距离。注意字母大小写。注意:精灵王子跑步、闪烁或休息活动均以秒(s)为单位。且每次活动的持续时间为整数秒。距离的单位为米(m)。 注:M、S、T均是大于等于0的整数。由输入保证取值合法性,考生不用检查。 提醒: 如果输入的S为0,则说明本身已经在出口,输出应为:Yes 0 如果输入的T为0(且S不为0),则说明已经没有时间了,输出应为:No 0 |
| 运行时间限制: | 无限制 |
| 内存限制: | 无限制 |
| 输入: |
输入格式: |
| 输出: |
输出格式: |
| 样例输入: |
10 50 5 |
| 样例输出: |
Yes 1 |
思路:每一秒都有三种选择, 1、以17m/s 跑。 2、消耗10魔法值, 60m/s。 3、原地等待, 恢复4魔法值。
注意必须用优先队列
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <cmath>
#include <algorithm>
using namespace std;
bool vis[][][];
int m, s, t, ans_s;
int dx[] = {, , };
int dy[] = {, -, }; struct node
{
int dis, tt, mm;
bool operator < (const node &tmp)const
{
return dis > tmp.dis;
}
} pos, next;
void bfs()
{
int i;
queue<node>q;
memset(vis, , sizeof(vis));
next.dis = ;
next.tt = ;
next.mm = m;
vis[][][m] = true;
q.push(next);
ans_s = -;
while(!q.empty())
{
pos = q.front();
q.pop();
for(i = ; i < ; i++)
{
next.dis = pos.dis + dx[i];
next.tt = pos.tt + ;
next.mm = pos.mm + dy[i];
if(i == && next.mm < ) //第二种情况必须有10魔法值
continue;
if(i == && pos.mm/* + pos.dis >= s) //第三种如果魔法值已经够逃出洞穴,就不要再攒了
continue;
if(next.tt > t)
continue;
if(next.dis >= s)
{
printf("Yes %d\n", next.tt);
return;
}
if(next.tt == t && next.dis > ans_s) //如果时间正好,但是距离没有达到,就记录一下
ans_s = next.dis;
if(!vis[next.dis][next.tt][next.mm])
{
vis[next.dis][next.tt][next.mm] = true;
q.push(next);
}
}
}
printf("No %d\n", ans_s);
}
int main()
{
while(~scanf("%d%d%d", &m, &s, &t))
{
if(s==)
{
printf("Yes 0\n");
continue;
}
if(t==)
{
printf("No 0\n");
}
bfs();
}
return ;
}
第六届华为创新杯编程大赛-进阶1第1轮 洞穴逃生 (bfs + 优先队列)的更多相关文章
- nitacm第十六届浙江大学宁波理工学院程序设计大赛总结
校赛时间:2019.11.30周六下午12:00-16:00 重现赛链接:https://ac.nowcoder.com/acm/contest/2995#question 体验: 11点多到达石鳞大 ...
- 第十六届浙江大学宁波理工学院程序设计大赛 E 雷顿女士与平衡树(并查集)
题意 链接:https://ac.nowcoder.com/acm/contest/2995/E来源:牛客网 卡特莉正在爬树,此时她又在树梢发现了一个谜题,为了不令她分心以至于发生意外,请你帮她解决这 ...
- 第十六届浙江大学宁波理工学院程序设计大赛 D 雷顿女士与分队hard version(dp)
题意 链接:https://ac.nowcoder.com/acm/contest/2995/D来源:牛客网 卡特莉接到来自某程序设计竞赛集训队的邀请,来为他们进行分队规划. 现在集训队共有n名选手, ...
- 【结果发布】第六届SeedCoder编程大赛初赛结果发布
微软俱乐部科技文化月seedcoder2014编程大赛已经初审完成. 评审小组选出最棒的作品进入决赛(现场答辩+陈述环节,由评委现场打分).终于排名由"初赛分数+现场答辩分"决定. ...
- 沈抚示范区·“华为云杯”2021全国AI大赛圆满落
摘要:以赛促学,赛教结合!驱动AI产业繁荣发展 本文分享自华为云社区<云聚沈抚 · 智赢未来!沈抚示范区·"华为云杯"2021全国AI大赛圆满落幕>,作者:灰灰哒. 近 ...
- 2014嘉杰信息杯ACM/ICPC湖南程序设计邀请赛暨第六届湘潭市程序设计竞赛
比赛链接: http://202.197.224.59/OnlineJudge2/index.php/Contest/problems/contest_id/36 题目来源: 2014嘉杰信息杯ACM ...
- Imagine Cup 微软“创新杯”全球学生科技大赛
一. 介绍 微软创新杯微博:http://blog.sina.com.cn/u/1733906825 官方站点:https://www.microsoft.com/china/msdn/student ...
- 第六届蓝桥杯软件类省赛题解C++/Java
第六届蓝桥杯软件类省赛题解C++/Java 1[C++].统计不含4的数字统计10000至99999中,不包含4的数值个数.答:暴力循环范围内所有数字判断一下就是了,答案是52488 1[Java]. ...
- 2015年第六届蓝桥杯C/C++B组省赛题目解析
一.奖券数目 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位数(10000-99999),要求其中 ...
随机推荐
- description 数组的中文打印
打印一个对象:NSLog(@"%@", stu); 默认情况下打印的时对象的名字和内存地址:这时需要重写description方法 // 重写description方法 - (NS ...
- Cocos2dx 截屏
void SaveScreenshot() { CCSize size = CCDirector::sharedDirector()->getWinSize(); CCRenderTexture ...
- .NET开源项目介绍及资源推荐:数据持久层
在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...
- 数字式PID控制的应用总结
PID控制是一个二阶线性闭环控制器,通过调整比例.积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能.PID控制优点:a. 技术成熟,b. 易被人们熟悉和掌握,c. 不需要建立数学模型 ...
- 【BZOJ】【2223】【COCI 2009】PATULJCI
可持久化线段树 同BZOJ 3524,但是不要像我一样直接贴代码……TAT白白WA了一次,so sad /*********************************************** ...
- 【转载】C#.Net 创建网页快捷方式
using System.Runtime.InteropServices; using IWshRuntimeLibrary; // 添加引用:COM下Windows Script Host Obje ...
- hdu 3807
很好的思路 枚举有多少人有ipad 判是否满足题目给出的条件 #include <iostream> #include <cstring> #include <c ...
- git安装及使用
一.安装 1.从http://code.google.com/p/msysgit/下载Git-1.8.4-preview20130916.exe,并安装. 2.新建git目录,右键选择Git Bash ...
- C# 静态类
静态类是不能实例化的,我们直接使用它的属性与方法,静态类最大的特点就是共享. 探究 public static class StaticTestClass { ; public static void ...
- POJ 3258
River Hopscotch Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5961 Accepted: 2579 D ...