博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 4400 Mines(STL)
阅读量:6687 次
发布时间:2019-06-25

本文共 1255 字,大约阅读时间需要 4 分钟。

题目链接:

题意:平面上有n个炸弹,给出每个炸弹的中心和爆炸范围d(曼哈顿距离,即|x1-x2|+|y1-y2|)。输出点燃每个炸弹时爆炸的炸弹数。(A炸弹的中心在B炸弹的爆炸范围内,则B炸弹爆炸时,A也会爆炸)

思路:

STL:queue、multiset

函数:unique,lower_bound,upper_bound

首先,将x离散化,就是用unique整一下就行,很厉害。。。然后在去重后的x中查找时用lower_bound,不用自己写二分了,很简单。。。将结构体y和炸弹的编号插在multiset中,multiset真是个好东西。。。然会对于点燃的每个炸弹,BFS,找的时候,先找x的范围,再找y的范围。。

#include 
#include
#include
#include
#include
#include
using namespace std;struct Node{ int y,id; Node(){} Node(int _y,int _id):y(_y),id(_id){} bool operator<(const Node a) const { return y
S[MAX];multiset
::iterator L,R,it;int hash[MAX],n,m,num=0,visit[MAX],X;Circle a[MAX];int ABS(int x){ if(x<0) return -x; return x;}void deal(){ printf("Case #%d:\n",++num); memset(visit,0,sizeof(visit)); int A,B,i,t,ans,y; queue
Q; for(scanf("%d",&m);m--;) { scanf("%d",&t); t--; if(visit[t]) { puts("0"); continue; } while(!Q.empty()) Q.pop(); Q.push(t); visit[t]=1; ans=0; while(!Q.empty()) { ans++; t=Q.front(); Q.pop(); A=lower_bound(hash,hash+X,a[t].x-a[t].d)-hash; B=upper_bound(hash,hash+X,a[t].x+a[t].d)-hash; for(i=A;i
id]) { visit[it->id]=1; Q.push(it->id); } } S[i].erase(L,R); } } printf("%d\n",ans); }}int main(){ while(scanf("%d",&n),n) { int i,k; for(i=0;i

 

 

 

转载地址:http://pthao.baihongyu.com/

你可能感兴趣的文章
SQL常用语句集合(不断更新)
查看>>
回顾2014,展望2015
查看>>
BIOS基础知识(下)
查看>>
Iterator 和 Iterable 区别和联系
查看>>
经典SQL语句大全
查看>>
测试LCD1602的显示,显示时间,提示语
查看>>
Linux常用命令
查看>>
SecureCRT 连接Ubuntu乱码解决
查看>>
一致性hash算法及其java实现
查看>>
PHP常见的加密技术
查看>>
Asp.net读取AD域信息的方法(一)
查看>>
两道题学习动态规划
查看>>
mysql实战31 | 误删数据后除了跑路,还能怎么办?
查看>>
ASP.NET MVC Razor
查看>>
Subscribe的第四个参数用法
查看>>
vue-cli的项目加入骨架屏
查看>>
3.SOAP和WSDL的一些必要知识
查看>>
python:使用OO和工厂模式解决问题
查看>>
C++学习-2
查看>>
mysql单表导入数据,全量备份导入单表
查看>>