反正考的不是很好吧,赶脚炸了啊qwq

然后这两天一直在忙一些神奇的事情,所以没有整理完

手动@water_lift

T1:大美江湖:

【题目背景】

细雪飘落长街,枫叶红透又一年

不只为故友流连,其实我也恋长安

听门外足音慢,依稀见旧时容颜

故事几经悲欢,结局都与你有关

——银临《大美江湖》 【问题描述】

扶苏听着《大美江湖》,在剑三里控制着他的人物炮姐来到了长安。

长安城中有一个任务,需要扶苏进入地下的机关道,机关道是一个 n×m 的矩形地 图,里面有一些怪物和药水。扶苏操控着炮姐在机关道中游荡。有些时候他希望问问你 他的角色有多少攻击力、防御力以及丢失了多少血量。

具体的,在输入文件中会给出一个 n×m 的矩形地图,地图中第 i 行第 j 列的字符 Ci,j 代表机关道中第 i 行第 j 列的元素是什么。具体的,Ci,j∈{‘.’, ‘R’, ‘Q’, ‘Y’, ‘M’}。

其中,

1、字符 . 代表此处可以通过,且无其他元素

2、字符 R 代表此处为生命药水,可以减少炮姐 10 点丢失的血量 HP

3、字符 Q 代表此处为力量药水,可以增加炮姐 5 点攻击力 ST

4、字符 Y 代表此处为防御药水,可以增加炮姐 5 点防御力 DE

5、字符 M 代表此处为怪物,炮姐会损失相应血量

每只怪物都有三个参数来描述他们的属性,分别是血量 HPenemy,攻击力 STenemy,防 御力 DEenemy。且所有怪物的属性都相同。

一旦走到怪物格,遭遇战将开始。扶苏一定会打死怪物,怪物对炮姐造成的伤害为:

【6.20校内test】

(忍不住说这个数据有点水,我看错括号代码锅掉了居然还A了qwq)

其中 max(a,b) 代表取 a 和 b 的最大值;【6.20校内test】的值为不小于 x 的最小整数;下标为 enemy 的参数代表怪物的参数,下标为 my 的参数代表炮姐的参数 你会收到 q 次操作,每次操作要么是一次查询,要么是一次移动。 对于移动,你会再获得一个数字参数,这个参数只可能是 1/2/3/4 其中的一个,代表 炮姐向地图的 左/右/上/下 移动。

【输入格式】 输入文件名为 mzq.in。

输入文件中有且仅有一组数据,第一行为两个正整数 n 和 m,代表地图的大小

下面 n 行,每行 m 个字符,描述机关道的地图

下面一行有三个正整数,分别代表HPenemy,STenemy,DEenemy

下面一行有两个整数 x, y,代表炮姐初始在 第 x 行第 y 列出发。如果出发点有怪物,不发生战斗,如果有道具,不会将其捡拾。

下面一行给出两个正整数,代表炮姐初始的 ST 和 DE。

下面一行给出一个整数 q,代表操作个数

以下q行,每行首先有一个数字,如果是 1,则代表一次查询。否则数字一定是 2, 代表炮姐的一次移动,一个空格后会给出一个数字,作为移动的参数。

【输出格式】

输出文件名为 mzq.out。 对于每个查询,输出一行三个用空格隔开的整数,代表炮姐损失的血量 HP,当前 的攻击力 ST,以及当前的防御力 DE

【输入样例#1】

5 5

MMMMM

RRRRR

QQQQQ

YYYYY

.....

5 5 5

5 1

10 10

8

2 3

1

2 3

2 3

2 3

1

2 2

1

【输出样例#1】

0 10 15

1 15 15

2 15 15

注意:如果多次进入同一个格子,格子上的药水可以重复拾取,小怪会重复出现

注意:如果在拾取药水的时候人物损失的生命值低于10,则会将损失的生命值降至0

SOLUTION:

这道题其实只要直接模拟就好啦,然后注意到一些细节,注意动态维护伤害就好啦

然后其实自己的代码出锅了,所以各位大兄弟看看代码就好啦。

对了还有ceil不要随便用:  点这里吧

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<bits/stdc++.h>

using namespace std;

inline int read(){
    int ans=0;
    char last=' ',ch=getchar();
    while(ch<'0'||ch>'9') last=ch,ch=getchar();
    while(ch>='0'&&ch<='9') ans=ans*10+ch-'0',ch=getchar();
    if(last=='-') ans=-ans;
    return ans;
}

int n,m,hp,st,de,sh,x,y,stm,dem,q,cz,hps,yd;
int dx[5]={0,0,0,-1,1};
int dy[5]={0,-1,1,0,0};
char a[101][101];

int sx(){
    int f=max(1,stm-de);
    int g=hp/f;
    if(hp%f!=0) g++;
    int z=max(1,g);
    int a=max(1,st-dem);
    int y=z*a;
    return y;
}

//%%%zay 
 
int main(){
    freopen("mzq.in","r",stdin);
    freopen("mzq.out","w",stdout);
    n=read();m=read();
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++)
            a[i][j]=getchar();
        getchar();
    }
    hp=read();st=read();de=read();
    x=read();y=read();
    stm=read();dem=read();
    q=read();
    for(int i=1;i<=q;i++){
        cz=read();
        if(cz==1)
            cout<<hps<<" "<<stm<<" "<<dem<<endl;
        else {
            yd=read();
            x+=dx[yd];
            y+=dy[yd];
            if(a[x][y]=='M'){
                hps+=sx();
            }
            if(a[x][y]=='R'){
                if(hps<10) hps=0;
                else hps-=10;
            }
            if(a[x][y]=='Q'){
                stm+=5;
            }
            if(a[x][y]=='Y'){
                dem+=5;
            }
            if(a[x][y]=='.'){
                continue;
            }
        }
    }
    return 0;
}
出锅的 Code

相关文章: