csp201609-3炉石传说

题目:炉石传说
题意:
在这里插入图片描述

输入:
在这里插入图片描述

输出:
在这里插入图片描述样例:
在这里插入图片描述

注意:
在这里插入图片描述

解题思路:这个题有两个玩家,并且采用的是回合制;我可以设置一个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;
    }
}
发布了34 篇原创文章 · 获赞 0 · 访问量 858

猜你喜欢

转载自blog.csdn.net/qq_43653717/article/details/105519486