题解:这个题一直放着,因为好多人说很复杂,看了看不就是使用list进行模拟就行了么,于是就说用dev c++写一写,越写越有感觉,真的不要被题面难住了,直接模拟就行了。
附上代码:
#include<iostream>
#include<cstdio>
#include<list>
using namespace std;
struct node{
int hp;
int at;
};
list<node>xian,hou;
using namespace std;
int main()
{
node temp1;
temp1.hp=30;
temp1.at=0;
xian.push_front(temp1);
hou.push_front(temp1);
int n;
string s;
cin>>n;
int flag=1;
int po,at,hp;
for(int i=1;i<=n;i++){
cin>>s;
if(s=="end"){
flag=-flag;
}else if(s=="summon"){
cin>>po>>at>>hp;
node temp;
temp.hp=hp;
temp.at=at;
if(flag==1){
int cnt=0;
int ff=0;
for(list<node>::iterator iter=xian.begin();iter!=xian.end();iter++){
cnt++;
if(cnt==po+1){
xian.insert(iter,temp);
ff=1;
break;
}
}
if(!ff){
xian.push_back(temp);
}
}else{
int cnt=0;
int ff=0;
for(list<node>::iterator iter=hou.begin();iter!=hou.end();iter++){
cnt++;
if(cnt==po+1){
hou.insert(iter,temp);
ff=1;
break;
}
}
if(!ff){
hou.push_back(temp);
}
}
}else if(s=="attack"){
int attaker,defener;
cin>>attaker>>defener;
int diao1,diao2;
int cnt1=0,cnt2=0;
if(flag==1){
list<node>::iterator iter1,iter2;
for(iter1=hou.begin();iter1!=hou.end();iter1++){
cnt2++;
if(cnt2==defener+1){
diao1=(*iter1).at;
break;
}
}
for(iter2=xian.begin();iter2!=xian.end();iter2++){
cnt1++;
if(cnt1==attaker+1){
diao2=(*iter2).at;
break;
}
}
(*iter1).hp-=diao2;
if((*iter1).hp<=0){
if(cnt2!=1){
hou.erase(iter1);
}
}
(*iter2).hp-=diao1;
if((*iter2).hp<=0){
if(cnt1!=1){
xian.erase(iter2);
}
}
}else{
list<node>::iterator iter1,iter2;
for(iter1=xian.begin();iter1!=xian.end();iter1++){
cnt2++;
if(cnt2==defener+1){
diao1=(*iter1).at;
break;
}
}
for(iter2=hou.begin();iter2!=hou.end();iter2++){
cnt1++;
if(cnt1==attaker+1){
diao2=(*iter2).at;
break;
}
}
(*iter1).hp-=diao2;
if((*iter1).hp<=0){
if(cnt2!=1){
xian.erase(iter1);
}
}
(*iter2).hp-=diao1;
if((*iter2).hp<=0){
if(cnt1!=1){
hou.erase(iter2);
}
}
// for(list<node>::iterator iter=xian.begin();iter!=xian.end();iter++){
// cout<<(*iter).hp<<" "<<(*iter).at<<endl;
// }
// cout<<endl;
// for(list<node>::iterator iter=hou.begin();iter!=hou.end();iter++){
// cout<<(*iter).hp<<" "<<(*iter).at<<endl;
// }
// cout<<endl;
}
}
}
node temp2=xian.front();
node temp3=hou.front();
if(temp2.hp>0&&temp3.hp<=0){
cout<<1<<endl;
}else if(temp2.hp<=0&&temp3.hp>0){
cout<<-1<<endl;
}else{
cout<<0<<endl;
}
cout<<temp2.hp<<endl;
int len=xian.size()-1;
cout<<len<<" ";
for(list<node>::iterator iter=xian.begin();iter!=xian.end();iter++){
if(iter!=xian.begin()){
cout<<(*iter).hp<<" ";
}
}
cout<<endl;
cout<<temp3.hp<<endl;
len=hou.size()-1;
cout<<len<<" ";
for(list<node>::iterator iter=hou.begin();iter!=hou.end();iter++){
if(iter!=hou.begin()){
cout<<(*iter).hp<<" ";
}
}
cout<<endl;
return 0;
}