瞌睡小源


私信TA

用户名:H2130823055

访问量:5091

签 名:

我が名はめぐみん、爆裂魔法を操りし者

等  级
排  名 45
经  验 11557
参赛次数 5
文章发表 76
年  龄 0
在职情况 学生
学  校 贺州学院
专  业

  自我简介:

解题思路:

暴力的将排雷火箭和爆炸的地雷装入队列对余下的地雷进行检验是否能引爆

我使用了一点小优化,在装地雷的数组中,将引爆的地雷放到数组的前面,下次遍历地雷数组时就可以只遍历还没引爆的地雷了

注意使用较快的输入和输出
参考代码:

#include<bits/stdc++.h>
using namespace std;
struct node
{
	long long x,y,r;
}boom[1000005];
queue<node>q;
bool check(node a,node b)
{
	return a.r*a.r>=((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld%lld%lld",&boom[i].x,&boom[i].y,&boom[i].r);
	}
	for(int i=1;i<=m;i++)
	{
		node t;
		scanf("%lld%lld%lld",&t.x,&t.y,&t.r);
		q.push(t);
	}
	int k=1;
	int ans=0;
	while(!q.empty())
	{
		node t;
		t=q.front();
		q.pop();
		for(int i=k;i<=n;i++)
		{
			if(check(t,boom[i]))
			{
			    q.push(boom[i]);
				swap(boom[k],boom[i]);//交换到最前面
				k++;//下次遍历就可以跳过爆炸的地雷
				ans++;	
				if(ans==n)
				{
					printf("%d",ans);
	                return 0;
				}
				//cout<<t.r<<endl;
			}
		}
		
	}
	printf("%d",ans);
	return 0;
}


 

0.0分

2 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

超时了
2024-04-07 19:39:08
  • «
  • 1
  • »