题目链接:点我啊╭(╯^╰)╮

题目大意:

二维平面,nnn 个气球
    要求水平方向射三枪,垂直射三枪
    每一枪可以打穿一行或一列的所有气球
    水平或垂直的相邻枪的距离为 rrr
    求能射中的最多气球数

解题思路:

一个气球 (x,y)(x,y)(x,y) 在垂直方向上,可以影响到的射击路线是 y−r,y,y+ry-r,y,y+ry−r,y,y+r
    在水平方向上,可以被 x−r,x,x+rx-r,x,x+rx−r,x,x+r 影响
    设 h[x]h[x]h[x] 为射击 xxx 行可以影响到的所有气球(三行)
    a[y]a[y]a[y] 为射击 yyy 列可以影响到的气球数(三列)

开始将所有气球都加入到每一个 a[y]a[y]a[y] 中
    枚举每一行 xxx ,将该行所能射中的所有气球
    所在能被射中的列中删去
    维护每一列的最大射中数
    时间复杂度: O(32×n×2+n×3)O(3^2\times n\times 2 + n\times 3)O(32×n×2+n×3)

核心:将三行影响转化为一行影响

#include<bits/stdc++.h>
#define rint register int
#define deb(x) cerr<<#x<<" = "<<(x)<<'\n';
using namespace std;
typedef long long ll;
using pii = pair <ll,int>;
const int maxn = 2e5 + 5;
int n, r, ans, mx, a[maxn], cnt[maxn];
vector <int> h[maxn];inline void add(int y){if(y < 0) return;cnt[a[y]++]--;mx = max(mx, a[y]);cnt[a[y]]++;
}inline void del(int y){if(y < 0) return;cnt[a[y]]--;if(cnt[a[y]]==0 && mx==a[y]) mx--;if(a[y]) cnt[--a[y]]++;
}int main() {scanf("%d%d", &n, &r);for(int i=1, x, y; i<=n; i++){scanf("%d%d", &x, &y);h[x].push_back(y);if(x >= r) h[x-r].push_back(y);h[x+r].push_back(y);add(y), add(y-r), add(y+r);}for(int x=0; x<maxn; x++){int res = h[x].size();if(!res) continue;for(auto y : h[x]) del(y), del(y-r), del(y+r);ans = max(ans, res + mx);for(auto y : h[x]) add(y), add(y-r), add(y+r);}printf("%d\n", ans);
}

牛客第三场 F Popping Balloons —— 思维 + 搞题相关推荐

  1. 牛客第十场 F.Popping Balloons

    第一维直接遍历 第二维用线段树维护每个最左端可以得到的贡献 在线段树上每次删除一个点会影响到 X   X-R   X-2*R  3个值 最多操作1e5次 复杂度 6*n*logn(删了还要加回来 #i ...

  2. 2019牛客多校训练第十场F Popping Balloons

    2019牛客多校训练第十场F Popping Balloons 题意:二维平面内给你若干个点,然后你可以在x轴和y轴分别射三枪(每一枪的间隔是R),问最多能射掉多少气球. 题解:贪心.这个应该只能算作 ...

  3. 牛客第三场多校 H Diff-prime Pairs

    链接:https://www.nowcoder.com/acm/contest/141/H 来源:牛客网 Eddy has solved lots of problem involving calcu ...

  4. 2019牛客多校第十场 F.Popping Balloons

    使用线段树,将(1,1+r,1+2r),(2,2+r,2+2r),(3,3+r,3+2r)以此类推,每个看成一个节点,对y进行建树,然后枚举x,维护最大值即可. 代码如下: #include<c ...

  5. 2019暑假牛客第5场-F.maximum clique 1-最大独立集(输出方案)

    题面: 思路: 建图方法若两个数有且仅有一个位不同,那么连边(从左边指向右边). 根据某个数的二进制表达式中有奇数个1还是偶数个1,分成左边和右边. 对于二分图,跑匈牙利求最大匹配,最大独立集=节点数 ...

  6. 【2020年牛客暑假第九场】E题 Groundhog Chasing Death

    [2020年牛客暑假第九场]E题 Groundhog Chasing Death 质因子分解 题意 思路 方法一:先枚举iii再枚举公共质因子 Code(286ms) 方法二:先枚举公共质因子再枚举i ...

  7. 牛客第六场 H-Hopping Rabbit

    牛客第六场 H-Hopping Rabbit 给出平面上的n个矩形,一只兔子从(x0+0.5,y0+0.5)(x_0+0.5,y_0+0.5)(x0​+0.5,y0​+0.5)出发,每一次可以平行于x ...

  8. 牛客小白月赛61 F.选座椅(双指针)

    牛客小白月赛61 F.选座椅(双指针) 显然 ( l , r ) (l,r) (l,r)满足 ( l , r + 1 ) (l,r+1) (l,r+1)满足. 那么可以考虑双指针,枚举 l l l,然 ...

  9. 牛客小白月赛2 F.黑黑白白

    牛客小白月赛2 F.黑黑白白 题目链接 题目描述 艮为山,动静得宜,适可而止:兑为泽,刚内柔外,上下相和. 艮卦:兼山,艮:君子以思不出其位.财帛常打心头走,可惜眼前难到手,不如意时且忍耐,逢着闲事休 ...

最新文章

  1. etcd 笔记(09)— 基于 etcd 实现微服务的注册与发现
  2. php.ini安全配置详细解释
  3. include 路由 php,PHP简单路由
  4. python json.loads json.dumps(ensure_ascii = False) 汉字乱码问题解决
  5. 在传统Spring应用中使用spring-boot-actuator模块提供监控端点
  6. linux下删除已经创建的数据库,MongoDB 数据库的创建和删除
  7. python数据透视、有的value不能同时输出_python – Pandas数据透视表ValueError:索引包含重复的条目,无法重新整形...
  8. 华科计算机学院三好学生,他是华科“三好学生标兵”,被保研到北大、复旦、交大等3所名校!...
  9. .NET DLL 保护措施详解(四)各操作系统运行情况
  10. 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.
  11. 18100出多少取整_关于JavaScript数据类型,你知道多少?
  12. 京东与滁州达成战略合作,共建全国首座智慧型家电产地仓
  13. 查看服务器的性能和使用状态(top,free,df)
  14. oracle行相减,oracle两张表满足某个条件时,表中满足条件的那一行的某列相减
  15. 八、面向对象三大特征(二)—— 继承
  16. TextBox的样式改成Lable
  17. 放大电路、单管共发射极放大电路结构、工作原理、lceda仿真
  18. 使用itextpdf切割、合并pdf以及合并多个图片成为pdf
  19. 3D游戏编程作业10
  20. win10系统编辑服务器在哪里设置密码,技术编辑处置win10系统忘记登录密码的设置技巧...

热门文章

  1. leetcode876.链表的中间结点
  2. 在三星smart TV上开发widget-入门篇
  3. 怎么理解python语言是一种强类型语言_Python 到底是强类型语言,还是弱类型语言?...
  4. SAP SD V/LD标准定价报表配置
  5. [转帖]国产闪存颗粒终于熬出头 紫光存储S100固态硬盘评测
  6. 交换机组播风暴_【交换机】交换机如何配置storm-contro风暴控制
  7. 中医四季养生法 冬季补肾汤
  8. Python 利用数据分布直方图来确定合适的阈值
  9. ubuntu修改登陆用户名称_Ubuntu-修改计算机名(hostname)和修改用户名
  10. 一行代码可以做什么?