🐱🐱🦁🦁🐯🐯大家好,这是一起备战CCF与蓝桥杯系列第3篇,之前因为考试周的原因好久没更了,继续开始我们的备战之旅!!!🐮🐮🦈🦈🦉🦉
之前我们已经讲解了我们的备战思路以及一些题目,大家忘记了可以去看看哦!! 1.备战思路及大模拟模板生成系统 2.一起备战蓝桥杯与CCF-CSP之大模拟画图) 3.一起备战蓝桥杯与CCF-CSP之大模拟路径解析
什么,你作业很多?快来看看作业侠系列的最新文章有没有你需要的吧! 作业侠最新文章
话不多说,开始今天的题目讲解,这次我们要模拟的是炉石传说!
具体题目如下(图片来源:ACwing):
官网对应链接:
炉石传说
先说刷题感想:
相比以前,要是我看到这又丑又长的题目,早跑路了,但是刷了几题之后,感觉这确实没啥,在自己能够理解的范围,要实现也不是很难,只要会基础的一些语法就能够解出来的,所以希望大家坚持下去,我们一起坚持!!!
解题思路:
首先我们需要想好怎么存储题目中涉及的数据,y总说过,大模拟只要想好怎么存储,其他的问题都问题不大,根据题目要求, 我们需要存储的数据有: 1.双方英雄的生命值和攻击力 2.双方随从的生命值和攻击力 需要我们解决的问题有: 1.回合制如何切换? 2.随从召唤需要移动位置如何处理? 3.随从死亡左移如何处理?
上面的问题如何解决,见下面代码里的注释
代码如下(不正确版,反面教材,不过思路没问题):
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct Role{
int attack;
int hp;
}role[2][10];
int t=0;
int l=0;
int main()
{
role[0][0]=role[1][0]={0,30};
int n;
cin>>n;
while(n--)
{
string s;
cin>>s;
if(s=="end")
{
t++;
l=t%2;
}
else if(s=="summon")
{
int x,y,z;
cin>>x>>y>>z;
for(int i=7;i>x;i--) role[l][i]=role[l][i-1];
role[l][x]={y,z};
}
else
{
int x,y;
cin>>x>>y;
role[!l][y].hp=role[l][x].attack-role[!l][y].hp;
role[l][x].hp=role[!l][y].attack-role[l][x].hp;
if(role[l][x].hp<=0 && x) for(int i=x;i<=7;i++) role[l][x]=role[l][x+1];
if(role[!l][y].hp<=0 && y!=0) for(int i=y;i<=7;i++) role[!l][y]=role[!l][y+1];
}
}
if(role[0][0].hp<=0) puts("-1");
else if(role[1][0].hp<=0) puts("1");
else puts("0");
cout<<role[0][0].hp<<endl;
int live=0;
for(int i=1;i<=7;i++)
{
if(role[0][i].hp>0) live++;
}
cout<<live<<" ";
for(int i=1;i<=7;i++)
{
if(role[0][i].hp > 0) cout<<role[0][i].hp<<" ";
}
cout<<endl;
cout<<role[1][0].hp<<endl;
int live1=0;
for(int i=1;i<=7;i++)
{
if(role[1][i].hp>0) live1++;
}
cout<<live1<<" ";
for(int i=1;i<=7;i++)
{
if(role[1][i].hp>0) cout<<role[1][i].hp<<" ";
}
cout<<endl;
return 0;
}
上面的代码问题在于博主没有认真看题,他应该是被攻击的hp-攻击的attack,并且在, if(role[l][x].hp<=0 && x) for(int i=x;i<=7;i++) role[l][x]=role[l][x+1]; if(role[!l][y].hp<=0 && y!=0) for(int i=y;i<=7;i++) role[!l][y]=role[!l][y+1]; 上面的role[l][x]应该改为对应的y,cv之后忘记改了,不过我为大家交了一发试试水,就这lj代码Acwing能过5个点,官网能过50%,这还不快来和我一起刷,血赚!
下面是正确代码:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct Role{
int attack;
int hp;
}role[2][10];
int t=0;
int l=0;
int main()
{
role[0][0]=role[1][0]={0,30};
int n;
cin>>n;
while(n--)
{
string s;
cin>>s;
if(s=="end")
{
t++;
l=t%2;
}
else if(s=="summon")
{
int x,y,z;
cin>>x>>y>>z;
for(int i=7;i>x;i--) role[l][i]=role[l][i-1];
role[l][x]={y,z};
}
else
{
int x,y;
cin>>x>>y;
role[!l][y].hp=role[!l][y].hp-role[l][x].attack;
role[l][x].hp=role[l][x].hp-role[!l][y].attack;
if(role[l][x].hp<=0 && x) for(int i=x;i<=7;i++) role[l][i]=role[l][i+1];
if(role[!l][y].hp<=0 && y) for(int i=y;i<=7;i++) role[!l][i]=role[!l][i+1];
}
}
if(role[0][0].hp<=0) puts("-1");
else if(role[1][0].hp<=0) puts("1");
else puts("0");
cout<<role[0][0].hp<<endl;
int live=0;
for(int i=1;i<=7;i++)
{
if(role[0][i].hp>0) live++;
}
cout<<live<<" ";
for(int i=1;i<=7;i++)
{
if(role[0][i].hp > 0) cout<<role[0][i].hp<<" ";
}
cout<<endl;
cout<<role[1][0].hp<<endl;
int live1=0;
for(int i=1;i<=7;i++)
{
if(role[1][i].hp>0) live1++;
}
cout<<live1<<" ";
for(int i=1;i<=7;i++)
{
if(role[1][i].hp>0) cout<<role[1][i].hp<<" ";
}
cout<<endl;
return 0;
}
Acwing交,wa的是前一个代码的 官网交: 最后是y总代码:
#include <iostream>
#include <cstring>
#include <algorithm>
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];
}
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;
else if (op == "summon")
{
int pos, a, h;
cin >> pos >> a >> h;
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;
p[k][a].h -= p[!k][d].a;
p[!k][d].h -= p[k][a].a;
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;
}
作者:yxc
链接:https:
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
只能说y总nb,今天就到这里吧!????????
|