试题来源
  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. 【思维题 线段树】cf446C. DZY Loves Fibonacci Numbers

    我这种maintain写法好zz.考试时获得了40pts的RE好成绩 In mathematical terms, the sequence Fn of Fibonacci numbers is de ...

  2. [BZOJ] 1127: [POI2008]KUP

    似曾相识的感觉 考虑另一个判断问题,给定一个k,问这个k是否可行 存在矩形和\(sum>2k\),则该矩阵不对判定做出贡献 存在矩形和\(sum\in [k,2k]\),则我们找到了一个解 于是 ...

  3. jenkins 插件

  4. 如何用纯 CSS 和 D3 创作一只扭动的蠕虫

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/QBQJMg 可交互视频 ...

  5. selenium +python web自动化测试环境搭建

    基础框架搭建 1.安装python 2.安装selenium cmd输入pip install selenium 问题:在python中输入from selenium import webdriver ...

  6. Nginx是用来干什么的?

    一.静态HTTP服务器 首先,Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML.图片)通过HTTP协议展现给客户端. 配置: server { listen80; # 端口号 lo ...

  7. STM32的IAP方案

    from:   http://bbs.eeworld.com.cn/thread-294115-1-1.html 几乎所有的同类书籍都介绍综合性的应用示例如“万年历 + 温度显示 + 闹钟响铃 + 计 ...

  8. Apache ant 配置

    ANT_HOME C:\Program Files(D)\apache-ant-1.10.1Path %ANT_HOME%/binant -v

  9. [转] 彻底搞懂word-break、word-wrap、white-space

    white-space.word-break.word-wrap(overflow-wrap)估计是css里最基本又最让人迷惑的三个属性了,我也是用了n次都经常搞混,必须系统整理一下,今天我们就把这三 ...

  10. xcode8.1 autolayout 找不到 Update Frames 按钮