博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tsinsen 1485 Catch The Penguins 抓企鹅 ——Bitset
阅读量:5937 次
发布时间:2019-06-19

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

【题目分析】

    刚开始想的是KD-Tree去暴力求解。

    写了半天还没有暴力得的分数多(说好的nlogn呢)

    直接按照四个维度排序。

    然后扫一遍,用bitset去维护,然后对于四个维度小于一个询问的结果取一个交就可以了。

    Bitset大法好。

【代码】

垃圾KD-Tree

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define maxn 500005#define mlog 16#define F(i,j,k) for (int i=j;i<=k;++i)#define inf (1e18)void Finout(){ #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout); #endif}struct node{double d[4],mn[4],mx[4];int siz,l,r;}t[maxn],now;int n,q,D,rt,tot=0,m;bool operator < (node x,node y){return x.d[D]
l?build(l,mid-1,(dir+1)%4):0; t[mid].r=mid
=0&&t[o].mx[i]<=now.d[i]); else flag=0; } { if (t[o].mn[i]>=0&&t[o].mn[i]<=now.d[i]); else flag=0; } } return flag;}void print(int o){ if (!o) return; printf("%d t[o].mn[0]=%f t[o].mn[1]=%f t[o].mx[0]=%f t[o].mx[1]=%f l :%d r: %d\n",o,t[o].mn[0],t[o].mn[1],t[o].mx[0],t[o].mx[1],t[o].l,t[o].r); print(t[o].l); print(t[o].r);}bool din(int o){ int flag=1; F(i,0,3) { if (t[o].d[i]>=0&&t[o].d[i]<=now.d[i]); else flag=0; } return flag;}bool out(int o){ int flag=1; F(i,0,3) { if ((t[o].mx[i]>now.d[i]&&t[o].mn[i]>now.d[i])||(t[o].mx[i]<0&&t[o].mn[i]<0)); else flag=0; } return flag;}int query(int o){ if (!o) return 0; if (in(o)){return t[o].siz;} else { int ret=0; if (din(o)) ret+=1; if (t[o].l) { if (out(t[o].l)); else ret+=query(t[o].l); } if (t[o].r) { if (out(t[o].r)); else ret+=query(t[o].r); } return ret; }}int main(){ Finout(); F(i,0,3) t[0].mx[i]=inf,t[0].mn[i]=-inf; scanf("%d",&m);n=1; F(i,1,m) { int flag=1; F(j,0,3) { scanf("%lf",&t[n].d[j]); if (t[n].d[j]<0) flag=0; } if (flag) n++; } n--; rt=build(1,n,1); scanf("%d",&q); F(i,1,q) { int flag=1; F(j,0,3) { scanf("%lf",&now.d[j]); if (now.d[j]<0) flag=0; } if (flag) printf("%d\n",query(rt)); else printf("0\n"); }}

有趣的Bitset

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define maxn 30010#define F(i,j,k) for (int i=j;i<=k;++i)int Getint(){ int x=0,f=1; char ch=getchar(); while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();} while (ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();} return x*f;}bitset
b[maxn],now;struct node{double d[4];int id;}a[maxn],q[maxn];int n,m,D;bool cmp(node x,node y){return x.d[D]

  

转载于:https://www.cnblogs.com/SfailSth/p/6344774.html

你可能感兴趣的文章
【数据库】sql2008卸载和默认实例的删除 ...
查看>>
SDNU 1086.迷宫问题(bfs标记路径)
查看>>
类的高内聚低耦合
查看>>
怎么下载geventwebsocket
查看>>
React文档(十六)refs和DOM
查看>>
电信计费业务:预后融合OCS到底应该实扣还是虚扣?
查看>>
【算法学习笔记】42.正反DP 填充问题 SJTU OJ 1285 时晴时雨
查看>>
《Python编程从入门到实践》学习笔记<7>:用户输入和while循环
查看>>
winform 批量控件取值赋值
查看>>
Div+css 怎么让一个小div在另一个大div里面 垂直居中
查看>>
我要学习go语言!
查看>>
解决-修改SQL 2005 Express混合认证模式
查看>>
我的Java开发学习之旅------>银行业务调度系统
查看>>
Android eclipse 程序调试
查看>>
请听一个故事------>讲述一段失败的创业经历 ,希望你能从中受到启发
查看>>
详解连接SQL Server数据库的方法,并使用Statement接口实现对数据库的增删改操作...
查看>>
js组成之dom_dom对象样式操作及运用
查看>>
jquery_jquery动态创建元素及应用
查看>>
[转载]Windows 2012 R2安装SharePoint 2013 手动安装工具软件
查看>>
Filter学习(三)Filter(过滤器)常见应用
查看>>