试题来源
  2013中国国家集训队论文答辩
问题描述
  Xyz带着他的教徒们乘着科考船一路破冰来到了南极大陆,发现这里有许许多多的企鹅。邪恶的Xyz想要抓很多企鹅回去开动物园,当宠物玩。但动物保护协会很快赶来,他必须尽快行动!
  我们把南极大陆看成一个三维直角坐标系。
  有N只企鹅,每只企鹅会在一定的时刻的出现,第i只企鹅在Ai时刻出现在坐标为(Bi,Ci,Di)的地方。
  Xyz要在某一时刻在某一地方(X,Y,Z)撒一张大网,将(0,0,0)到(X,Y,Z)这个大长方体里的企鹅全都网进去捕捉回家(还没出现的企鹅就不会被捉进去了)。
  为了快准狠而且保证不铺张浪费网,Xyz想知道不同时间不同地点撒网能抓到几个企鹅(这样的询问有Q个)。然后他再行动。
输入格式
  第一行一个整数N表示企鹅个数。
  第二行到N+1行每行四个实数(Ai,Bi,Ci,Di),表示企鹅的出现时间和位置
  第N+2行一个整数Q表示询问个数。
  接下来Q行每行四个实数(T,X,Y,Z),表示询问的时间和位置。
输出格式
  输出共Q行,每行一个整数,回答每个询问能抓到几个企鹅。
样例输入
1
0 0 0 0
2
1 1 1 1.0
1 1 1 -1
样例输出
1
0
数据规模和约定
  共20个数据
  数据1~3 N,Q<=1000
  数据4~6 N,Q<=5000
  数据7~10 N,Q<=10000
  数据11~14 N<=30000,Q<=10000
  数据15~18 N<=10000,Q<=30000
  数据19~20 N,Q<=30000

位运算。

四维分开计算。

按照某个维度从小到大排序询问和企鹅。用bitset状态压缩记录这一维中满足询问要求的企鹅有哪些。

然后求四维度答案的交集。

 /*by SilverN*/
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<bitset>
using namespace std;
const int mxn=;
int n;
struct qe{
double w[];
int id;
}a[mxn],q[mxn];
bitset<> b[];
int ans[mxn];
int D=;
int cmp(const qe a,const qe b){return a.w[D]<b.w[D];}
int main(){
int i,j;
scanf("%d",&n);
for(i=;i<=n;i++){
scanf("%lf%lf%lf%lf",&a[i].w[],&a[i].w[],&a[i].w[],&a[i].w[]);
a[i].id=i;
}
int Q;
scanf("%d",&Q);
for(i=;i<=Q;i++){
scanf("%lf%lf%lf%lf",&q[i].w[],&q[i].w[],&q[i].w[],&q[i].w[]);
q[i].id=i;
b[i].set();
}
for(i=;i<=;i++){
D=i;
sort(a+,a+n+,cmp);
sort(q+,q+Q+,cmp);
int hd=;
bitset<>res;
res.reset();
for(j=;j<=Q;j++){
while(a[hd].w[D]<=q[j].w[D] && hd<=n){
res[a[hd].id]=;
hd++;
}
b[q[j].id]&=res;
}
}
for(i=;i<=Q;i++)printf("%d\n",b[i].count());
return ;
}

清澄 A1485. Catch The Penguins 抓企鹅的更多相关文章

  1. Tsinsen 1485 Catch The Penguins 抓企鹅 ——Bitset

    [题目分析] 刚开始想的是KD-Tree去暴力求解. 写了半天还没有暴力得的分数多(说好的nlogn呢) 直接按照四个维度排序. 然后扫一遍,用bitset去维护,然后对于四个维度小于一个询问的结果取 ...

  2. B - Catch That Cow (抓牛)

    B - Catch That Cow Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u ...

  3. 用正则表达式抓取网页中的ul 和 li标签中最终的值!

                获取你要抓取的页面 const string URL = "http://www.hn3ddf.gov.cn/price/GetList.html?pageno=1& ...

  4. C# 中异常抛出捕获机制--throw / try,catch,finally

    try { messagebox.show("true"); } catch { messagebox.show("false"); } finally { m ...

  5. java之try catch finally

    try{ }catch(Exception e){ }finally{ } java异常处理在编程中很常见,将可能抛出异常的语句放在try{}中,若有异常抛出,则try{}中抛出异常语句之后的语句不再 ...

  6. UE4 Android打包 问题 记录笔记

    问题一:error: expression result unused [-Werror,-Wunused-value] 虽然看了输出日志知道了这行沉余代码删掉就行,但是不是很懂这个地方报错意义. 问 ...

  7. 原来还有这样的记词方法_Java版记不规则动词_博主推荐

    昨天在看一本英语书的不规则动词的时候,突然产生的灵感:就是想把这样记单词简单方式,用程序代码实现,然后,使用户可以与之进行交互 这样,在用户背不规则动词的时候就会轻松把它给记住.基于这一点,于是我就思 ...

  8. Jdbc 事务

    package com.j1; import java.sql.Connection; import java.sql.SQLException; import com.mysql.jdbc.Prep ...

  9. Javaweb 第15天 web练习和分页技术

    第15天 web练习和分页技术 复习day14内容: 学习新技术的思路? 分析功能的思路? 使用queryRunner操作数据库的步骤? ResultSetHandler接口常用实现类(三个重点)? ...

随机推荐

  1. CV做直方图的比较说明图形越相似性

    #include "opencv/cv.hpp" #include "opencv2/objdetect/objdetect.hpp" #include &qu ...

  2. java在线聊天项目1.3版设计好友列表框功能补充,因只要用户登录就发送一串新列表,导致不同客户端好友列表不同问题

    解决完毕后效果图: 好友列表Vector添加的时候进行判断,如果有相同的则不添加 int flag=0; for (int i = 0; i < names.size(); i++) { if ...

  3. jenkins 全局工具配置

  4. 动态设置html的title

    使用vue前端框架做,竟然丢弃了很多javascript和html的东西了..动态设置title的方法: 1.使用vue的自定义指令 <div v-title>{{htmltitle}}& ...

  5. python-matplotlib-lec0

    直奔主题吧..以下是对matplotlib画图的简单讲解,代码已测试. win7 + pycharm + python 2.7 参考文档: http://old.sebug.net/paper/boo ...

  6. excel日期格式取年份

    具体思路:先将日期格式更改为常规格式,再取常规格式的前4位数字 例如:A1==1981/12/22 第一步B1=TEXT(A1,"emd") 第二步C1=LEFT(B1,4) 结束

  7. centos7 安装显卡驱动方法

    方法一: 首先需要添加一个第三方的源ELRepo.这个源支持RED HAT系的Linux系统,主要是提供一些硬件的驱动程序.这个源的主页如下: http://elrepo.org/tiki/tiki- ...

  8. HDU - 1465 不容易系列之一(错排)

    HDU有个网名叫做8006的男性同学,结交网友无数,最近该同学玩起了浪漫,同时给n个网友每人写了一封信,这都没什么,要命的是,他竟然把所有的信都装错了信封!注意了,是全部装错哟! 现在的问题是:请大家 ...

  9. Linux学习-账号管理

    新增与移除使用者: useradd, 相关配置文件, passwd, usermod, userdel 我们登入系统时会输入 (1)账号与 (2)密码,所以建立一个可用的账号同样的也需要这两个数据.那 ...

  10. chrome无界面模式headless配置

    引入Options: 配置浏览器: 配置浏览器options,然后传入webdriver.Chrome()就可以成功使用了.