Content

题意实在是太过复杂了,因此请回到题面查看。

Data Range

本部分和 Solution 部分变量的含义同题面。

  • \(1\leqslant n,m\leqslant 100,0\leqslant q\leqslant 10^4,0\leqslant ST_0,DE_0,HP_0,ST,DE\leqslant 100,1\leqslant op\leqslant 2,1\leqslant d\leqslant 4\)。
  • \(C_{i,j}\) 只有可能是 .RQYM 五个字符之一。
  • 人物不会跑到地图外面。

Solution

不知道为什么被扶咕咕给改了题面……所以又重新做了一遍。

而且为什么一下扶苏一下炮姐啊,好混乱啊,搞得我都弄不清主人公到底是谁了。

分部分来讲:

Part 1 Test Data 1

因为 \(q=0\),也就是说没有提问,因此,你不需要输出任何东西就可以骗到这道题目的 \(10\) 分。

这部分分可以说对于萌新非常非常友好。

Part 2 Test Data 4,5

人物只固定在一个点上面游走,因此每次询问的答案一定分别是 \(0,ST\) 和 \(DE\)。输出 \(q\) 次即可拿到 \(20\) 分。

这部分分也可以说对于萌新是非常友好的。因此,我可以说,只要你会语法,这道题目至少可以拿到 \(30\) 分。

Part 3 Test Data 6~8

开始进入我们的正题了。由于这一部分没有怪物,所以我们只需要讨论捡到生命药水、力量药水和防御药水时的情况。

在此之前还需要考虑移动的情况,原来的题面当中是直接输入一个字符然后依此判断行动方向。而这里直接输入数字的话就很简单了,我们可以直接开一个数组,然后输入时将其作为数组的下标,就可以直接加进去当前位置的坐标里面去了。

再具体分析捡到三种药水的情况:

  • 生命药水:变化就是 \(HP\leftarrow\max(0,HP-10)\)。
  • 力量药水:变化就是 \(ST\leftarrow ST+5\)。
  • 防御药水:变化就是 \(DE\leftarrow DE+5\)。

由于捡到药水之后药水不会消失,因此不需要考虑是否已经捡到的情况。

Part 4 Others

捡到药水的情况我已经在上面讲过了,所以接下来就是考虑打怪时的情况。这里直接给了个式子给你:

\[\max(1,\left\lceil\dfrac{HP_0}{\max(1,ST-DE_0)}\right\rceil\times\max(1,ST_0-DE))
\]

你就直接按照这个式子算就好了。注意在使用 cmath 库里面的 ceil 函数时,不能够直接除,要先把被除数或者除数转换成 double 类型,然后再去除,最后向上取整之后用整型变量存储就好。

上面的所有变化用变量存储一下,询问的时候就直接输出就好了。

所以这道题目就做完了,还算是一道比较小清新的模拟题。

Code

const int dx[5] = {0, 0, 0, -1, 1};
const int dy[5] = {0, -1, 1, 0, 0};
struct misaka {
int hp0, st0, de0, curx, cury;
}fusu;
int n, m, hp, st, de, q;
char a[107][107]; int main() {
n = Rint, m = Rint;
F(i, 1, n) scanf("%s", a[i] + 1);
hp = Rint, st = Rint, de = Rint, fusu.curx = Rint, fusu.cury = Rint, fusu.st0 = Rint, fusu.de0 = Rint, q = Rint;
while(q--) {
int op = Rint;
if(op == 1) printf("%d %d %d\n", fusu.hp0, fusu.st0, fusu.de0);
else {
int d = Rint;
fusu.curx += dx[d], fusu.cury += dy[d];
if(a[fusu.curx][fusu.cury] == 'R') fusu.hp0 = max(0, fusu.hp0 - 10);
else if(a[fusu.curx][fusu.cury] == 'Q') fusu.st0 += 5;
else if(a[fusu.curx][fusu.cury] == 'Y') fusu.de0 += 5;
else if(a[fusu.curx][fusu.cury] == 'M') fusu.hp0 += max(1, (int)ceil(hp * 1.0 / (max(1, fusu.st0 - de) * 1.0)) * max(1, st - fusu.de0));
}
}
return 0;
}

LuoguP5006 [yLOI2018] 大美江湖 题解的更多相关文章

  1. 6.20校内考试整理——大美江湖&&腐草为萤&&锦鲤抄题解

    先安利一下题目作者:一扶苏一 先看第一题: 这道题就是一道简单的模拟题,只要不管一开始的位置,模拟移动与格子对应的触发事件就行了.话不多说,看代码: #include<iostream> ...

  2. 模拟赛DAY1 T1大美江湖

    这就是一个模拟题,注意1234分别对应左右上下横坐标和纵坐标的判断就好了 题解: 需要注意的是,向上取整ceil函数是对于一个double值返回一个double值,也就是说在ceil里面的类型一定要是 ...

  3. 2019.6.20 校内测试 NOIP模拟 Day 1 分析+题解

    这次是zay神仙给我们出的NOIP模拟题,不得不说好难啊QwQ,又倒数了~ T1 大美江湖 这个题是一个简单的模拟题.   ----zay 唯一的坑点就是打怪的时候计算向上取整时,如果用ceil函数一 ...

  4. 【6.20校内test】

    反正考的不是很好吧,赶脚炸了啊qwq 然后这两天一直在忙一些神奇的事情,所以没有整理完 手动@water_lift T1:大美江湖: [题目背景] 细雪飘落长街,枫叶红透又一年 不只为故友流连,其实我 ...

  5. 校内考试之zay与银临(day1)

    T1大美江湖(洛谷P5006) zayの题解: 这个题的本质是模拟 不过有卡ceil的地方 ceil是对一个double进行向上取整,而对于int/int来说,返回值是int 举个生动的栗子 ceil ...

  6. NIOP 膜你题

    NOIp膜你题   Day1 duliu 出题人:ZAY    1.大美江湖(mzq.cpp/c) [题目背景] 细雪飘落长街,枫叶红透又一年不只为故友流连,其实我也恋长安听门外足音慢,依稀见旧时容颜 ...

  7. 【码在江湖】前端少侠的json故事(上)日月第一击

    日月第一击 这是我前端生涯第一次和后台对接,其经历真是苦不堪言,多次绝处逢生,柳暗花明,可就是迟迟见不到那条村子.当然,最后我还是完成了这次对接.下面来聊一聊我这白痴一般的经历. 序章 话说天下大势, ...

  8. 【码在江湖】前端少侠的json故事(下):jsonp的应用

    jsonp的应用 话说天下大势,分久必合,合久必分,代码江湖自进入21世纪以来,前后端分离成为了大势所趋,代码分工更为精细,更为深入,而正所谓码在江湖,身不由己,为了更好的实现需求,程序猿们必须不断学 ...

  9. 【码在江湖】前端少侠的json故事(中)ng的json

    ng的json 正所谓"人在江湖,身不由己",在开发之路上前端少侠dk遇到过种种困难,尤其在与后端进行数据对接的时候,不得不逼迫自己以极快的速度去学习和掌握一些奇招怪式,正当他以为 ...

随机推荐

  1. Java编程之学习技巧

    **本人博客网站 **IT小神 www.itxiaoshen.com 找到技术点 首先得知道自己要学习技术是什么?不管是来自同事.技术大牛推荐还是通过搜索引擎得到,或者另有出处如.技术交流群.技术论坛 ...

  2. Anaconda建立新的环境,出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url ...... 解决过程

    2020.3.7准备scrapy,使用anaconda创建一个新的环境,执行"conda create -n scrapyEnv python=3.6",结果出现了"Co ...

  3. 【模板】网络最大流(EK、Dinic、ISAP)(网络流)/洛谷P3376

    题目链接 https://www.luogu.com.cn/problem/P3376 题目大意 输入格式 第一行包含四个正整数 \(n,m,s,t\),分别表示点的个数.有向边的个数.源点序号.汇点 ...

  4. How To Call An Ambulance

    How to Talk to the Emergency Dispatcher [minutesmatter.upmc稻糠亩] How To Call An Ambulance [askambulan ...

  5. day01 MySQL发展史

    day01 MySQL发展史 今日内容概要 数据库演变史 软件开发架构 数据库本质 数据库中的重要概念 MySQL下载与安装 基本SQL语句 今日内容详细 数据库演变史 # 1.文件操作阶段 jaso ...

  6. windows Notepad++ 上配置 vs 编译器 , 编译并运行

    windows 中 配置 vs编译器 在Linux下,Kris是倾向于在终端中使用gcc和g++来编译C/C++的,在Windows下相信很多人都是选择臃肿的Visual Studio,我亦不免如此. ...

  7. ssh : connect to host XXX.XXX.XXX.XXX port : 22 connect refused

    初学者 写博客 如有不对之处请多多指教 我是要在俩个主机的俩个虚拟机上 用scp (security copy)进行文件远程复制. 但是 终端 提示 ssh : connect to host XXX ...

  8. Linux基础命令---enable开启shell命令

    enable enable指令用来关闭或者激活shell内部命令.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora. 1.语法       enable [-a]   ...

  9. mysql index 8.0

    创建表 use vodb; drop table if exists test1; create table test1(id int NOT NULL AUTO_INCREMENT primary ...

  10. error信息

    /opt/hadoop/src/contrib/eclipse-plugin/build.xml:61: warning: 'includeantruntime' was not set, defau ...