题目:炉石传说
题意:
输入:
输出:
样例:
注意:
解题思路:这个题有两个玩家,并且采用的是回合制;我可以设置一个flag作为玩家,flag=0的时候是第一个玩家,=1的时候是第二个玩家;当出现end的时候,flag就+1之后mod2;由于插入一个元素之后,这个元素的右边的元素都右移一位,这里可以用vector这个数据结构来储存元素。如果出现玩家死亡,直接退出循环;
代码:
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
struct node
{
int attack;
int blood;
};
vector<node> a[2];
int flag=0;//设置个flag
int main()
{
int n;
cin>>n;
node d;
d.attack=0,d.blood=30;
a[0].push_back(d);//首先将玩家加入
a[1].push_back(d);
int flag1=0;
while(n--)
{
if(flag1){break;}//判定是否有玩家胜出
string t;
cin>>t;
if(t=="end")//结束的时候,换人
{
flag=(1+flag)%2;
continue;
}
if(t=="summon")//插入
{
int x,y,z;
cin>>x>>y>>z;
node h;
h.attack=y,h.blood=z;
a[flag].insert(a[flag].begin()+x,h);
}
if(t=="attack")//删除
{
int x,y;
cin>>x>>y;
int flag2=(1+flag)%2;
node c1=a[flag][x];
node c2=a[flag2][y];
c1.blood-=c2.attack;
c2.blood-=c1.attack;
if(c2.blood<=0)
{
if(y==0)//判定玩家是否死亡
{
if(flag2==0)
{
flag1=-1;
a[0][0].blood=c2.blood;
}else if(flag2==1)
{
flag1=1;
a[1][0].blood=c2.blood;
}
}else
{
a[flag2].erase(a[flag2].begin()+y);
}
}else if(c2.blood>0)
{
a[flag2][y].blood=c2.blood;
}
if(c1.blood<=0)//由于攻击方的攻击力一定大于0,所以玩家不可能攻击,也就是说玩家的血不会掉
{
a[flag].erase(a[flag].begin()+x);
}else if(c1.blood>0)
{
a[flag][x].blood=c1.blood;
}
}
}
if(flag1==0)
{
cout<<0<<endl;
}else if(a[1][0].blood>0)//判断一下
{
cout<<-1<<endl;
}else
{
cout<<1<<endl;
}
int t1=a[0].size()-1,t2=a[1].size()-1;
for(int i=0;i<a[0].size();i++)
{
if(i==0)
{
cout<<a[i][0].blood<<endl;
cout<<t1;
continue;
}
cout<<" "<<a[0][i].blood;
}
cout<<endl;
for(int i=0;i<a[1].size();i++)
{
if(i==0)
{
cout<<a[1][0].blood<<endl;
cout<<t2;
continue;
}
cout<<" "<<a[1][i].blood;
}
}