• CCF201609-3


    博客园的大佬的源码给我提供了很多帮助。

    这个题最省事的部分在于使用了vector中的insert()erase()方法,放置随从等操作简洁了许多。

    以攻击操作为例,在一方的某随从攻击指定随从后,遍历双方的随从(使用迭代器),发现生命值小于等于0的,即从随从数组中抹去。

    end()函数的意义在于,在一方结束后,及时综合考察整个战场的状况。

    #include<bits/stdc++.h>
    
    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;
    }
    
  • 相关阅读:
    Qt自定义一个事件类型
    Qt正则表达式限制输入
    QtQuick随笔
    右值引用示例
    虚函数习题复习
    实现基于IOCP的回声服务器端
    以纯重叠I/O方式实现回声服务器端(windows)
    使用事件对象(重叠I/O)
    pipe mmap
    ubuntu下压缩和解压缩的命令用法
  • 原文地址:https://www.cnblogs.com/master-cn/p/12912921.html
Copyright © 2020-2023  润新知