Let life be beautiful |

Ginger_he

园龄:3年1个月粉丝:5关注:5

洛谷P5006题解

本文同步更新于洛谷博客

题目描述

你在一张地图上移动,用 1/2/3/4 来表示左/右/上/下,当前格子上的字母代表着你要进行相应的操作。

RHPmax(0,HP10)
QSTST+5
YDEDE+5
MHPHP+max(1,HP0max(1,STDE0)×max(1,ST0DE))
(具体题意还是建议看原题)

题解

我们可以将角色和怪物的属性用结构体存起来,然后记录下角色的位置,每次进行相应的操作即可。

注意

  • 上文中的 为赋值符号。
  • 使用函数 ceil 最好转成 double 类型再使用。
  • 对于这种阅读理解题一定要先读清题意和题目要求才去打代码。

Code

#include<bits/stdc++.h>
using namespace std;
struct node
{
	int hp,st,de;
}a,b;
int n,m,t,x,y,op,d,p,q;
int dx[]={0,0,0,-1,1},dy[]={0,-1,1,0,0};
char s[105][105];
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    scanf("\n%s",s[i]+1);
    scanf("%d%d%d%d%d%d%d%d",&a.hp,&a.st,&a.de,&x,&y,&b.st,&b.de,&t);
    while(t--)
    {
	scanf("%d",&op);
	if(op&1)
	    printf("%d %d %d\n",b.hp,b.st,b.de);
	else
	{
	    scanf("%d",&d);
	    x+=dx[d],y+=dy[d];
	    if(s[x][y]=='R')
		b.hp=max(0,b.hp-10);
	    else if(s[x][y]=='Q')
		b.st+=5;
	    else if(s[x][y]=='Y')
		b.de+=5;
	    else if(s[x][y]=='M')
	    {
		p=ceil(double(a.hp/max(1.0,double(b.st-a.de))));
		q=max(1,a.st-b.de);
		b.hp+=max(1,p*q);
	    }
	}
    }
    return 0;
}

本文作者:Ginger_he

本文链接:https://www.cnblogs.com/Gingerhe/p/16009982.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Ginger_he  阅读(32)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起