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;
}
posted @ 2022-03-23 20:32  Jason142  阅读(28)  评论(0编辑  收藏  举报