阿里笔试4.27场

第二题
勇者和怪物各三个属性,血量H,攻击力A,防御力D
回合制战斗,伤害计算max(A-D, 1)
每战胜一只怪物,奖励三选一:H+1000,A+10或D+10
最多战胜多少
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

struct Hero
{  int H;  int A;  int D; 
   ***t H_, int A_, int D_ ) : H(H_), A(A_), D(D_) {};
};

bool fight(Hero &hero, Hero monster)
{
	while (hero.H > 0 && monster.H > 0)
	{
		monster.H -= max(hero.A - monster.D, 1);
		if (monster.H <= 0) return true;
		hero.H -= max(monster.A - hero.D, 1);
		if (hero.H <= 0) return false;
	}
}

int main()
{
	int H, A, D, n;
	cin >> H >> A >> D >> n;

	Hero hero(H, A, D);
	vector<Hero> monsters;
	for (int i = 0; i < n; i++)
	{
		cin >> H>> A>> D;
		Hero monster(H, A, D);
		monsters.push_back(monster);
	}

	int successNumber = 0;
	queue<Hero> qHeroStatus;
	qHeroStatus.push(hero);
	while (!qHeroStatus.empty())
	{
		int sz = qHeroStatus.size();
		bool flag = false;

		for (int i = 0; i < sz; i++)
		{
			Hero tmpHero = qHeroStatus.front();
			qHeroStatus.pop();

			//fight
			if (fight(tmpHero, monsters[successNumber]))
			{
				flag = true;
				Hero tmp1 = tmpHero, tmp2 = tmpHero, tmp3 = tmpHero;
				tmp1.H += 1000;
				tmp2.A += 10;
				tmp3.D += 10;
				qHeroStatus.push(tmp1);
				qHeroStatus.push(tmp2);
				qHeroStatus.push(tmp3);	
			}
		}

		if(flag) successNumber++;
		if (successNumber == n) break;
	}

	cout << successNumber ;

	return 0;
}


#阿里笔试2020##阿里巴巴##笔试题目#
全部评论
AC了吗,感觉fight里面可以优化,分别算两边死亡的回合数,回合数小的先死,不需要一直while模拟。 看了题目感觉n<=200,第一时间觉得深搜复杂度是3^200就觉得不行。😂
1 回复 分享
发布于 2020-04-30 19:40
dalao有题目吗
点赞 回复 分享
发布于 2020-05-01 19:16
tql
点赞 回复 分享
发布于 2020-04-30 15:19
打完怪物之后自动满血?????我考虑的掉血,其他代码都是一样的
点赞 回复 分享
发布于 2020-04-28 00:43
大佬有第一题代码吗,我觉得和leetcode上994腐烂的橘子有点像
点赞 回复 分享
发布于 2020-04-27 21:30

相关推荐

头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
没有offer的呆呆:薪资有的时候也能说明一些问题,太少了活不活得下去是一方面,感觉学习也有限
点赞 评论 收藏
分享
评论
1
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务