在前几天的时候,千古神犇zay(吊打zhx那个)出了一套神仙题目,所以我得来分析分析QWQ
毕竟是T1嘛,还算是比较简单的,那道题,读完题目就发现是个中等模拟(猪国杀算大模拟的话QWQ)
然后就按照题目来写啦,大面上的东西不大难,但是细节很多
1.读入地图的时候会出现把换行读进去的诡异情境,我的解决方案是读完n个之后char一个temp,来补掉这个换行,要是哪位大佬有别的方法的话,欢迎在评论区斧正QWQ
2.上下左右的移动,我一开始xy++--想当然了,导致出来的结果是错误的,因为设置数组的方式不同,所以加减变化的影响是不一样的,这个得亲自试验一下
3.因为计算血量的时候有一个该死的分数,所以你得用double,而且ceil上取整取出来的竟然还是个double?????真的是很玄学了
这几个点都注意到的话应该就没有什么问题了
代码贴一下吧
#include <iostream> #include <cstdio> #include <cmath> using namespace std; char map[110][110]; int n,m,hp,st,de,pst,pde,q,x,y,blood; int main() { freopen("mzq.in","r",stdin); freopen("mzq.out","w",stdout); scanf("%d%d",&n,&m); for (int i = 1; i <= n; ++i) { char qwq = getchar(); for (int j = 1; j <= m; ++j) map[i][j] = getchar(); } scanf("%d%d%d",&hp,&st,&de);//怪物 scanf("%d%d",&x,&y);//起点 scanf("%d%d",&pst,&pde);//炮姐初始的 ST 和 DE。 scanf("%d",&q); for(int i = 1; i <= q;++i) { int temp; scanf("%d",&temp); if(temp == 1) printf("%d %d %d ",blood,pst,pde); else { int canshu; scanf("%d",&canshu); if(canshu == 1) y--; if(canshu == 2) y++; if(canshu == 3) x--; if(canshu == 4) x++; if(map[x][y] == '.') continue; if(map[x][y] == 'R') { blood -= 10; if(blood <= 0) blood = 0; } if(map[x][y] == 'Q') pst += 5; if(map[x][y] == 'Y') pde += 5; if(map[x][y] == 'M') { int temp1 = ceil(double(hp)/ double(max(1,pst - de))); int temp2 = max(1 , st - pde); blood += max(1 , temp1 * temp2); } } } return 0; }
OK
完事!