CCF炉石传说 模拟

Posted itcsl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF炉石传说 模拟相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<map>
#include<vector>

using namespace std;
int n;
string cmd;
int now=0;
struct node{
    int attack;
    int health;
    node(int _attack,int _health):attack(_attack),health(_health){}
};
vector<node> smn[2];
vector<node>::iterator it;

void init(){
    for(int i=0;i<2;i++){
        smn[i].clear();
        smn[i].push_back(node(0,30));
    }
    now=0;
}
void summon(){
    int position,attack,health;
    cin>>position>>attack>>health;
    it=smn[now].begin();
    smn[now].insert(it+position,node(attack,health));
}
void attack(){
    int attacker,defender;
    cin>>attacker>>defender;
    smn[now][attacker].health-=smn[now^1][defender].attack;
    smn[now^1][defender].health-=smn[now][attacker].attack;
    for(int i=0;i<2;i++){
        for(it=smn[i].begin()+1;it<smn[i].end();it++){
            if((*it).health<=0){
                smn[i].erase(it);
            }
        }
    }
}
void end(){
    if(smn[0][0].health<=0&&smn[1][0].health>0){
        printf("-1
");
    }else if(smn[0][0].health>0&&smn[1][0].health>0){
        printf("0
");
    }else{
        printf("1
");
    }
    for(int i=0;i<2;i++){
        printf("%d
",smn[i][0].health);
        printf("%d",(int)smn[i].size()-1);
        for(int j=1;j<(int)smn[i].size();j++){
            printf(" %d ",smn[i][j].health);
        }
        printf("
");
    }

}
int main(){
    init();
    cin>>n;
    while(n--){
        cin>>cmd;
        if(cmd=="summon"){
            summon();
        }else if(cmd=="attack"){
            attack();
        }else if(cmd=="end"){
            now^=1;
        }
    }
    end();
    return 0;
}

 

以上是关于CCF炉石传说 模拟的主要内容,如果未能解决你的问题,请参考以下文章

CCF-CSP题解 201609-3 炉石传说

ccf-20160903--炉石传说

CCF CSP 201609-3 炉石传说

CCF 201609-3 炉石传说

ccf 201609-3 炉石传说

CCF - 201609-3 - 炉石传说