洛谷P5006题解
本文同步更新于洛谷博客
题目描述
你在一张地图上移动,用 \(1/2/3/4\) 来表示左/右/上/下,当前格子上的字母代表着你要进行相应的操作。
R:\(HP\gets\max(0,HP-10)\)
Q:\(ST\gets ST+5\)
Y:\(DE\gets DE+5\)
M:\(HP\gets HP+\max(1,\left\lceil\dfrac{HP_0}{\max(1,ST-DE_0)}\right\rceil\times\max(1,ST_0-DE))\)
(具体题意还是建议看原题)
题解
我们可以将角色和怪物的属性用结构体存起来,然后记录下角色的位置,每次进行相应的操作即可。
注意
- 上文中的 \(\gets\) 为赋值符号。
- 使用函数
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;
}

浙公网安备 33010602011771号