1 条题解

  • 0
    @ 2025-8-24 22:06:06

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 翼德天尊
    2019-09-26 ~ 2024-03-03

    搬运于2025-08-24 22:06:06,当前版本为作者最后更新于2020-04-04 12:58:45,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    一道看似很困难,实际上只是纯模拟的“火”题

    题目传送门

    来吧,跟随我的脚步,带你A了这道题(当然,不要ctrl+c哦)!


    STEP 1 提取主要条件

    1.给你一幅图,各个字母的特殊功效如下其中如果遇到:

    R:角色扣的血量 hp - 10(hp > = 0)

    Q:角色的攻击力 st + 5

    Y:角色的防御力 de + 5

    M:角色将会扣血(公式如题)

    2.已知每个敌人的属性( hp , st , de )以及角色的属性( x , y , hp , st , de )

    3.有q个事件,分为两种事件类型:

    第一种:查询( 即输出角色的 hp , st , de )

    第二种:移动:1、2、3、4分别对应左右上下。 移动后,进行条件1的操作。

    你,明白了吗?是不是so easy?!


    STEP 2 AC代码及完整注释(超短的哦)

    #include <bits/stdc++.h>//美丽的万能头
    using namespace std;
    #define maxn(a,b) ((a)>(b)?(a):(b)) 
    //自己定义一个取最大值,这样可以支持浮点和整形相比较
    int n,m,q,w;//分别储存地图的长和宽,时间的个数,以及一个用来暂存的变量
    char ma[101][101];//储存地图
    int dx[5]={0,0,0,-1,1};
    int dy[5]={0,-1,1,0,0};//移动数组
    struct node{
    	int hp,st,de;
    }gw;//敌人的信息
    struct node1{
    	int hp,st,de,x,y;
    }js;//角色的信息
    int main(){
    	scanf("%d %d",&n,&m);
    	for (int i=1;i<=n;i++) scanf("%s",ma[i]+1);
    	scanf("%d %d %d\n%d %d\n%d %d\n%d",&gw.hp,&gw.st,&gw.de,&js.x,&js.y,&js.st,&js.de,&q);
    	//正常输入
    	while (q--){
        	scanf("%d",&w);//输入事件类型
        	if (w==1) printf("%d %d %d\n",js.hp,js.st,js.de);//如果为1就打印角色属性
        	if (w==2){
    			scanf("%d",&w);//如果为2就移动
    			js.x+=dx[w];js.y+=dy[w];//移动对应的方向
    			if (ma[js.x][js.y]=='R') js.hp=maxn(js.hp-10,0);
    			if (ma[js.x][js.y]=='Q') js.st+=5;
    			if (ma[js.x][js.y]=='Y') js.de+=5;
    			int b1=ceil(double(gw.hp/maxn(1.0,js.st-gw.de)));
    			int b2=maxn(1,gw.st-js.de);//将算式的两部分分开来算不容易出错
    			if (ma[js.x][js.y]=='M') js.hp+=maxn(1,b1*b2);
                //发生事件
    		}
    	}
    	return 0;//好习惯++
    }
    

    STEP 3 完结撒花!

    看完本篇题解,你是否有些恍然大悟呢?如果还有不懂的地方,欢迎在评论区回复,我会第一时间回复哒!

    如果已经明白了,就点个赞纪念一下你的成长吧!

    • 1

    信息

    ID
    3971
    时间
    1000ms
    内存
    500MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者