G. 精灵宝可梦对战

G. 精灵宝可梦对战

实在是有些憋不住了,有点优雅这个题目,就是模拟的一个洛克王国的宠物对战??

队友小姐姐用的数组写的,我用的结构体和队列,当时场上因为没有排除死掉的宝可梦导致一直TLE(不如T死竹子呜呜呜呜~~,队友帅T姐姐也没想到用队列弹宠哇,之后YY一提这题就让我闭嘴,不过这次在我的帮助(要挟)下,她勇敢地面对阴影,把题解简单写了一下)总结就是题目细节是真的多,再多点碰撞检测,我就直接去写java给您宝贵的策划组搞一个宠物对战程序了(可怜巴巴~)ps:直接提交cf的话把注释删一下,否则会提示不是简单文本~~

之后会持续更新女生赛题目(只要蒋老师少布置一点题目,一定会的呜呜~)

#include "iostream"
#include "queue"
#include "vector"
#include "algorithm"
using namespace std;
struct BK{
	int H,A,B,C,D,E,W,e;	
};//属性比较多,所以考虑用结构体,一个BK代表一个宝可梦 
int h,a,b,c,d,e,w,ee;
queue<BK> AA,BB;  //AA和BB 表示小A和小B   ps:比较形象 
int main(){
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);  //关流很重要,否则会超时 
	int n,m,k,cnt1 = 0, cnt2 = 0;
	cin>>n>>m>>k;
	while(n--){
		cin>>h>>a>>b>>c>>d>>e>>w;
		BK x ;
		x.H = h, x.A = a, x.B = b, x.C = c, x.D = d, x.E = e, x.W = w, x.e = 0;
		AA.push(x);
		
	} //把小A的宝可梦载入 
	while(m--){
		cin>>h>>a>>b>>c>>d>>e>>w;
		BK x;
		x.H = h, x.A = a, x.B = b, x.C = c, x.D = d, x.E = e, x.W = w, x.e= 0;
		BB.push(x);
		
	}  //把小B的宝可梦载入 
			BK aa = AA.front();
			BK bb = BB.front();			
			k *= 2;
			long long count = 0;   //aa是攻击方,bb是被攻击方 
		while(!AA.empty() && !BB.empty() && k > 0){	//攻击过程,结束条件是某一个人的宝可梦死光或者局数用完	 
				long long hit,  p, q;
				p = aa.A - bb.C >  0? aa.A - bb.C :0;
				q = aa.B - bb.D >  0? aa.B - bb.D :0;
				hit = max(p, q);
				if(aa.W > hit && aa.e >=  aa.E) hit = aa.W, aa.e -= aa.E;
				if(hit == p || hit == q) aa.e ++;	//模拟攻击,找伤害,一定注意是实际伤害最大的,别忘了能量的变化			 
				bb.H -= hit;
								
			    AA.push(aa);
			    AA.pop(); 
			    aa = AA.front(); //攻击方换发 
									                  
				if(bb.H <= 0)
				{
					BB.pop();
					bb = BB.front();//被攻击方死了才能换下一个				 	
				}
				swap(aa,bb);
				swap(AA,BB); //A和B换发 
				count ++;
				k--;			 
			}
		if(k >= 0 && !AA.empty() && !BB.empty()) cout<<"Draw"<<endl; //没死光就是平局						
		else if(count % 2 == 0) cout<<"Bob"<<endl;    //总是A是单数攻击,B是双数攻击,所以看结束的时候的攻击局数就可以判断谁赢了 
		else if(count % 2 == 1) cout<<"Alice"<<endl;
	return 0;
	}
	

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小竹子14

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值