P5006 [yLOI2018] 大美江湖题解
题目:传送门
思路:
根据题目要求输入各项数据,输入字符型时要注意换行符哈,然后按照输入的数字进行输出或移动,若为移动则按照移动结果的类型(怪兽或药水)进行计算。(详见代码)
代码:
#include <bits/stdc++.h>
using namespace std;
int n,m,a,b,c,x,y,z,u,v,w,p,q,t,s,i,j;
char ch[105][105],cn;
int main()
{
scanf("%d%d\n",&n,&m);//读入 n 和 m ,注意加 '\n'
for (i=1;i<=n;i++)
{
for (j=1;j<=m;j++)
{
ch[i][j]=getchar();
}
cn=getchar();//读入换行符
}
scanf("%d%d%d",&a,&b,&c);
scanf("%d%d",&x,&y);
scanf("%d%d",&u,&v);
scanf("%d",&s);
for (i=1;i<=s;i++)
{
scanf("%d",&t);
//判断操作是查询还是移动
if (t==1) printf("%d %d %d\n",w,u,v);//如果操作是查询,则输出
else if (t==2)
{
scanf("%d",&z);
switch (z)//移动
{
case 1:y--;break;
case 2:y++;break;
case 3:x--;break;
case 4:x++;break;
}
if (ch[x][y]=='M') w+=max(1.,ceil((double)a/max(1,u-c))*max(1,b-v));//遇到怪兽,失去的血量增加,注意加 'double'
else if (ch[x][y]=='R')//生命药水,恢复血量
{
if (w>10) w-=10;//判断是恢复全部血量还是部分血量
else w=0;
}
else if (ch[x][y]=='Q') u+=5;//力量药水,增加攻击力
else if (ch[x][y]=='Y') v+=5;//防御药水,增加防御力
}
}
return 0;
}