题解 | #教科书般的亵渎#
教科书般的亵渎
https://ac.nowcoder.com/acm/problem/21442
感觉自己方法比较笨 完全就是看一步写一步(感觉就像面向过程的开发)
void ff()函数就执行一次亵渎 唯一递归就是 当有随从死亡就再执行一次亵渎
#include <iostream> using namespace std; struct node{ int Blood;//血量 bool Live;//是否死亡 }; node play_me[10];//自己随从 node play_ot[10];//敌方随从 int me,ot,Magic;//me(自己随从数量)ot(敌方随从数量)Magic(亵渎次数) void ff(){//执行一次亵渎 bool ok=false;//判断是否有随从死亡 for(int i=0;i<me;i++){//自己随从减血 if(play_me[i].Live){ play_me[i].Blood--; if(play_me[i].Blood==0){ ok=true; play_me[i].Live=false; } } } for(int i=0;i<ot;i++){//敌方随从减血 if(play_ot[i].Live){ play_ot[i].Blood--; if(play_ot[i].Blood==0){ ok=true; play_ot[i].Live=false; } } } if(ok)ff();//如果有随从死亡就再执行亵渎 } int main() { int N; cin>>N; for(int i=0;i<N;i++){ cin>>me>>ot>>Magic; bool result=false;//判断是否胜利 for(int j=0;j<me;j++){ cin>>play_me[j].Blood; play_me[j].Live=true; } for(int j=0;j<ot;j++){ cin>>play_ot[j].Blood; play_ot[j].Live=true; } for(int j=0;j<Magic;j++){//执行亵渎 ff(); for(int k=0;k<ot;k++){//判断是否胜利 if(play_ot[k].Live==false)result=true; else result=false; } } if(result){ cout<<"Legendary"<<endl; }else{ cout<<"GG"<<endl; } } }