1 条题解
-
0
这题就是一个很简单但是有点恶心的模拟,因为你要考虑很多状态,然后剩下的根据出牌的卡牌规则走就行了
然后就是具体状态的判断
1.防御值要连续存在3个回合才会全部清除,如果你这回合防御值被打空了,你清除防御值的判断就要从下次防御值出现的时候再开始判断
2.恶魔形态和狂暴状态是发动后下回合才开始生效的。
3.堡垒状态是发动后立即生效的。
4.痛击生成的状态,在下次痛击的时候也是会造成双倍伤害的。
5.当力量值超过10的时候,有关力量的增益卡牌和状态会无效,但不会清除。
6.堡垒状态若清除是仍然有防御值,需要重新判断防御值清除回合。
7.血量的话,是先扣防御值,再扣血量。
然后状态基本上判断也就这么多,具体可以看代码。
#include<algorithm> #include<iostream> #include<stdio.h> #include<string.h> #include<math.h> using namespace std; typedef long long ll; int main() { ll h,d,n; scanf("%lld %lld %lld",&h,&d,&n); ll emxt=0,kbbuff=0,bl=0,tj=0,kb=0,fy=0,nl=2,sum=0; ll zll=1,dll=1,flag=0; while(n--) { ll t; string x; cin>>t>>x; if(flag==1||flag==2) continue; if(emxt) zll=min(ll(10),zll+2); if(kbbuff) nl+=2; if(t==0) { if(x=="PK") { if(tj==1) d-=zll*2*6,tj=0; else d-=zll*6; } if(x=="FY") fy+=8; if(x=="NL") nl+=2; if(x=="XJ"&&h>=3) h-=3,nl+=2; if(x=="YLBD"&&nl>=2) fy+=30,nl-=2; if(x=="TPJX"&&nl>=2&&zll<10) zll=min(ll(10),zll*2),nl-=2; if(x=="EMXT"&&nl>=3) emxt=1,nl-=3; if(x=="BL"&&nl>=2) bl=1,nl-=2; if(x=="TJ"&&nl>=2) { if(tj==1) d-=8*zll*2; else d-=8*zll,tj=1; nl-=2; } if(x=="KB") kb=2,kbbuff=1; if(x=="RS"&&nl>=1&&zll<10) zll=min(ll(10),zll+2),nl-=1; if(x=="JH"&&nl>=2) dll=1,nl-=2; } else { if(x[0]=='S'&&x[1]=='H') { ll dx=(x[2]-'0')*dll; if(kb>=1) dx*=2,kb--; if(fy>=dx) fy-=dx; else dx-=fy,fy=0,h-=dx; } if(x=="QCLL") zll=1; if(x=="QCZT") emxt=0,bl=0,kbbuff=0,tj=0,sum=0; if(x=="YS") dll=min(ll(10),dll+1); } if(fy>0) sum=min(ll(3),sum+1); else sum=0; if(sum==3&&!bl) fy=0,sum=0; if(h<=0) flag=1; if(d<=0) flag=2; } if(flag==1) printf("NO %lld",d); else printf("YES %lld",h); }
- 1
信息
- ID
- 813
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 72
- 已通过
- 3
- 上传者