AcWing 3234-csp8(4). 炉石传说
原题链接
中等
作者:
YAX_AC
,
2024-11-17 14:28:06
,
所有人可见
,
阅读 3
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct Role
{
int a,h;
}p[2][10];
void remove(int k,int pos)
{
for(int i = pos; i<=7; i++)
p[k][i] = p[k][i+1]; //每个随从向前移动一位,即删除pos随从
}
int main()
{
int n;
cin>>n;
p[0][0].h = p[1][0].h = 30;
int k = 0;
while(n--)
{
string op;
cin>>op;
if(op == "end") k^=1;//k从0变为1,从1变为0
else if(op == "summon")//召唤
{
int pos,a,h;
cin>>pos>>a>>h;
//当召唤一个随从时,玩家指定召唤该随从放入战场的位置,此时,原来该位置及右边的所有随从编号都会增加 1
for(int i = 7; i>pos; i--) p[k][i] = p[k][i-1];
p[k][pos] = {a,h};
}
else//攻击
{
int a,d;
cin>>a>>d;//a发起攻击的编号,d被攻击的对方角色
p[k][a].h -= p[!k][d].a;//我方随从血量减去对方随从的攻击力
p[!k][d].h -= p[k][a].a;//对方随从的血量减去我方随从的攻击力
//发起攻击的不是英雄的话,血量<=0,删掉该随从
if(a && p[k][a].h <= 0) remove(k,a);
if(d && p[!k][d].h <= 0) remove(!k,d);
}
}
if(p[0][0].h <=0) puts("-1");
else if(p[1][0].h <= 0) puts("1");//对方英雄去世,我方获胜
else puts("0");
//输出双方的随从血量
for(int k = 0; k<2; k++)
{
cout<<p[k][0].h<<endl;
int s = 0;
for(int i = 1; i<=7; i++)
if(p[k][i].h > 0)
s++;
cout<<s<<' ';
for(int i = 1; i<=s; i++)
cout<<p[k][i].h<<' ';
cout<<endl;
}
return 0;
}
我感觉估计csp考频的话还是要多参考一下近几年的,我觉得近几年的多考码量题、数据结构题,像欧拉路径这种10多年前才出过一次的确实参考价值不大......
(๑• . •๑)(给出一点小小的个人建议…)
嗯嗯好的