首页 > 其他分享 >tnt破坏轮

tnt破坏轮

时间:2024-07-25 15:52:03浏览次数:2  
标签:tnt 破坏 int ++ vis 引爆

题目:给定n个破坏轮,告诉坐标和爆炸半径,只要其他破坏轮在当前爆炸半径内就继续引爆,问最多能引爆几个
思路,首先暴力查询一遍每个邻接表能引爆的tnt,用邻接表存储,再对每个炸弹进行深搜,就是一直找寻当前炸弹最多能引爆到第几个(具体在代码),一直到全部都爆炸或者没有在范围内的结束,最后更新最大值;

点击查看代码
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N = 1e5 + 5;
struct vv
{
	ll x, y, r; // x,y表示坐标,r表示破坏范围
};

// 检查两个 TNT 破坏轮是否在彼此的破坏范围内
int check(vv a, vv b)
{
	ll dx = a.x - b.x;
	ll dy = a.y - b.y;
	ll dist = dx * dx + dy * dy;
	return dist <= a.r * a.r;
}

vector<int> b[N]; // 邻接表存储每个 tnt 破坏轮可以引爆的其他 tnt
int vis[N];		  // 记录每个 tnt是否被访问过

// 计算从某个 tnt开始可以引爆的 tnt 数量
void dfs(int from, int &cnt)
{
	stack<int> st;
	st.push(from);
	while (!st.empty())
	{
		int from = st.top(); // 取出栈顶的 tnt 破坏轮
		st.pop();
		if (!vis[from]) // 如果该 tnt未被访问过则数量加1
		{
			vis[from]++;
			cnt++;
			for (auto to : b[from]) // 寻找从当前tnt可以引爆的其他tnt
			{
				if (!vis[to]) // 没爆炸过就入栈
				{
					st.push(to);
				}
			}
		}
	}
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin >> n;
	vector<vv> a(n); // 邻接表存储
	for (int i = 0; i < n; ++i)
	{
		cin >> a[i].x >> a[i].y >> a[i].r;
	}
	for (int i = 0; i < n; ++i)
	{
		for (int j = 0; j < n; ++j)
		{
			if (i != j && check(a[i], a[j])) // 如果两个 tnt 破坏轮在破坏范围内,将 j 加入 i 的邻接表中
			{
				b[i].push_back(j);
			}
		}
	}
	int ans = 0;
	for (int i = 0; i < n; ++i)
	{
		memset(vis, 0, sizeof(vis));
		if (!vis[i]) // 如果该 TNT 破坏轮未被访问过,记录从该tnt 破坏轮开始可以引爆的 tnt 破坏轮数量
		{
			int cnt = 0;
			dfs(i, cnt);
			ans = max(ans, cnt); // 更新最多可以引爆的 tnt破坏轮数量
		}
	}
	cout << ans << '\n';
	return 0;
}

标签:tnt,破坏,int,++,vis,引爆
From: https://www.cnblogs.com/tzstlove/p/18323352

相关文章

  • 笔记本误克隆病毒破坏装系统分区误删电脑数据
    针对笔记本误克隆病毒导致系统分区被破坏以及误删电脑数据的情况,以下是一些建议的恢复步骤和预防措施:一、数据恢复步骤1.立即停止使用电脑:1.一旦发现数据丢失或系统异常,应立即停止使用该笔记本,避免对硬盘进行进一步写入操作,以防止数据被覆盖,增加恢复难度。2.使用数据恢复软件:......
  • 日立硬盘病毒破坏文件打开乱码恢复
    针对您提到的“日立硬盘病毒破坏文件打开乱码恢复”问题,我们可以从以下几个方面进行分析,并给出具体的解决方案。一、可能的病毒类型由于描述中提到了“病毒破坏文件”,我们可以推测这可能是一种文件型病毒或加密勒索病毒。文件型病毒通常会感染并修改文件内容,导致文件损坏或无法......
  • 暗黑破坏神2版本1.13c的D2BS-kolbot(带踢桶功能)正式发布
    1、注意事项,尤其是自动开荒,请看其中的中文说明,特别提示:(1)得到act1的佣兵后,请手动更换一下,最好都是选冰属性并给其gamble一张弓(2)大约10级左右,角色就可以gamble到belt,请手动为之(3)进入act2后,立即手动更换佣兵,并gamble一把长柄(4)大约20级后就可以gamble到pike,这会大大增强佣兵大箱......
  • [1.11b]暗黑破坏神2带自动开荒的kolbot正式发布!
    注意事项:一、game.exe1.11b版的game.exe制作方法请见本博客的《暗黑破坏神2在1.12a之前各版本的免CD的game.exe建立方法》经过我的测试,如果是下载ThePhrozenKeep论坛的GalaXyHaXz在DiabloII1.09bNoCdCodeedits-ThePhrozenKeep(d2mods.info)帖子里提供的1.12a前......
  • 手写一个单例模式然后问如何破坏这个单例模式
    手写一个单例模式然后问如何破坏这个单例模式美团到店的原题,手写一个单例模式然后问如何破坏这个单例模式?单例模式谁都会,懒汉、饿汉、双重校验锁、匿名内部类、Enum,倒背如流了都,那如何破坏单例呢?以最简单的饿汉式写法为例:所谓单例,就是保证一个类只有一个实例对象,那想要破坏单......
  • dotnet 6 破坏性改动 仅引用程序集输出路径变更
    在dotnet5开始,可以设置ProduceReferenceAssembly为true让项目构建时输出仅引用程序集。仅引用程序集是仅导出项目的公开成员定义,而不包含具体的实现的代码逻辑。只用来被其他项目引用,体积很小,但不用来作为最终发布文件在此前的如下博客里面已经告诉大家如何创建仅引用程序......
  • 睡眠不足正这样破坏你的记忆力,即使补觉也无法挽回
    https://news.cnblogs.com/n/771611/ 早在古罗马时期,当时的修辞学家和教师昆体良(Quintilian)就已经看到了睡眠与记忆的密切联系:“这是一个奇怪的事实,其原因并不明显,一个晚上的间隔会大大增加记忆的强度……这个通常被认为导致遗忘的时间段,其实是在增强我们的记忆。”来源......
  • 如何找出企业安全系统中存在的各种潜在漏洞,验证企业的数据是否可被窃取或破坏
    随着数字化时代的到来,企业网站和信息系统成为了企业运营的核心,而安全问题也随之成为企业不可忽视的重要议题。为了帮助企业有效应对日益复杂多变的安全威胁,联通推出了渗透测试产品,以合宜的价格和多元化的黑客攻击手法,为企业提供全方位的安全保障。联通渗透测试产品是一种专业的安......
  • dotnet 8 破坏性改动 在 AssemblyInformationalVersionAttribute 添加上 git 的 commi
    我在一个WPF项目里面,在界面显示应用的版本号,更新到dotnet8的SDK之后,发现我的界面布局损坏了。本质上这个破坏性改动和WPF没有什么关系,是dotnet的SDK或编译器的破坏性变更,在AssemblyInformationalVersionAttribute的InformationalVersion属性里面写入了当前的git......
  • 【游戏设计随笔07】游戏设计师怎样防止玩家破坏自己该有的游戏体验?
    一、玩家会重复选择成功率高的策略风险能带来损失,也能带来收益。但是在失败成本过高的情况下(比如在某些一被发现则判定为失败的潜行游戏),大部分玩家并不会选择冒险而是选择成功率更高的方式去游玩,他们会重复选择更加谨慎的选择,导致游戏体验并没有按照收益更高同时风险更大的方式......