牛客多校第十场F-Popping Balloons
题目连接 牛客多校F-PoppingBalloons
题意:
用枪打气球,可以横着打三次,竖着打三次,横着打可以把那一行的气球全打下来,竖着打可以把那一列的气球全打下来,但是,每两次相邻的横着打或者竖着打,他们的距离要相差r,意思就是我当前打的是第x行,那我下一次只能打(x+r)或(x-r)行,问最多能打到多少气球。
思路:
贪心,先把每行每列的气球数都统计出来,还需要统计每个点的位置,若一个气球处于(X,Y),横着打过第X行,会对竖着打第Y列有影响,所以纪录一下每个气球的位置,方便之后减去重复计算的。纪录出来每行每列的气球数之后,再求一个对于每行每列的解是情况,(就是如果我的三枪分别打第X,X+r,X+2r这三行或列的气球数),并纪录下当前X的位置,所以可以用结构体来存,然后按照气球的数量排序,最后枚举行和列的位置找出最大值。
代码:
#include <stdio.h>
#include <algorithm>
#include <map>
using namespace std;
const int maxn = 300005;int x[maxn],y[maxn],n,r;
map<int,map<int,int> > mp;//二维数组太大,开map中再放一个map来纪录具体某个点的气球数量struct node
{int num,id;//纪录a[x]、a[x+r]、a[x+2*r]气球的数量以及x的位置,方便枚举
}cntx[maxn],cnty[maxn];bool cmp(node aa,node bb)
{return aa.num > bb.num;
}int main()
{scanf("%d%d",&n,&r);int a,b;int maxx=0,maxy=0;for(int i = 0;i < n;i++){scanf("%d%d",&a,&b);x[a]++,y[b]++;//纪录每行每列的气球数量if(a > maxx) maxx = a;if(b > maxy) maxy = b;mp[a][b]++;}for(int i = 0;i <= maxx;i++){cntx[i].num = x[i]+x[i+r]+x[i+2*r];cntx[i].id = i;}for(int i = 0;i <= maxy;i++){cnty[i].num = y[i]+y[i+r]+y[i+2*r];cnty[i].id = i;}sort(cntx,cntx+maxx+1,cmp);sort(cnty,cnty+maxy+1,cmp);int xx,yy,ans=0,sum=0;for(int i = 0;i <= min(3,maxx);i++){for(int j = 0;j <= min(3,maxy);j++){xx = cntx[i].id;yy = cnty[j].id;sum = cntx[i].num + cnty[j].num;for(int p = 0;p <= 2;p++){for(int q = 0;q <= 2;q++){sum -= mp[xx+r*p][yy+r*q];}}ans = max(ans,sum);}}printf("%d\n",ans);return 0;
}
牛客多校第十场F-Popping Balloons相关推荐
- 2019牛客多校第十场 F.Popping Balloons
使用线段树,将(1,1+r,1+2r),(2,2+r,2+2r),(3,3+r,3+2r)以此类推,每个看成一个节点,对y进行建树,然后枚举x,维护最大值即可. 代码如下: #include<c ...
- 2019牛客多校训练第十场F Popping Balloons
2019牛客多校训练第十场F Popping Balloons 题意:二维平面内给你若干个点,然后你可以在x轴和y轴分别射三枪(每一枪的间隔是R),问最多能射掉多少气球. 题解:贪心.这个应该只能算作 ...
- 牛客多校第十场 Han Xin and His Troops(扩展中国剩余)
链接:https://ac.nowcoder.com/acm/contest/890/D 来源:牛客网 题目描述 His majesty chatted with Han Xin about the ...
- bitset优化+滚动优化dp ----- 2021牛客多校第8场 F Robot
题目大意: 就是给你一个大小为n∗mn*mn∗m的矩阵,里面有障碍物,每次询问给你一个机器人,以及机器人的起始位置,问你这个机器人能否从起点到终点 机器人有3种类型 只能往右走 只能往下走 可以往右走 ...
- 线段树 ---- 线段树维护线段相加+滑动变长窗口 2021牛客多校第7场 F xay loves trees
题目大意: 给你两个大小相同的树但是形状不一定一样 叫你选出最大的子集,满足下面两个条件 在第一颗树上是一条链 在第二颗树上任意两个点都不是祖先关系 解题思路: 首先我们现在第二颗树上面把每个点的df ...
- 2019牛客多校第三场 F.Planting Trees
题目链接 题目链接 题解 题面上面很明显的提示了需要严格\(O(n^3)\)的算法. 先考虑一个过不了的做法,枚举右下角的\((x,y)\),然后二分矩形面积,枚举其中一边,则复杂度是\(O(n^3 ...
- [球体积交]Girlfriend 2021牛客多校第2场 F
题目描述 ZYT and ZFeT are great PUAs and both have two girlfriends,but they never think that their girlf ...
- 【牛客多校第十场】Coffee Chicken
题目描述 Dr. JYY has just created the Coffee Chicken strings, denoted as S(n). They are quite similar to ...
- 牛客第十场 F.Popping Balloons
第一维直接遍历 第二维用线段树维护每个最左端可以得到的贡献 在线段树上每次删除一个点会影响到 X X-R X-2*R 3个值 最多操作1e5次 复杂度 6*n*logn(删了还要加回来 #i ...
最新文章
- 传统网站与营销型网站区别盘比
- 关于 spring-aop理解
- IOS Animation-CAShapeLayer、UIBezierPath与Animation的结合
- mysql字段简索引_Mysql索引优化攻略(全)
- QT的QMovie类的使用
- workflow java_workflow java实现的activity工作流实例 Develop 238万源代码下载- www.pudn.com...
- ZooKeeper的原理(转)
- toolStrip 按钮图片大小的修改
- 海洋大数据关键技术及在灾害天气下船舶行为预测上的应用
- JAVA开心超级签名系统源码+部署文档
- nagios 监控出现It appears as though you do not have permission
- V8 JavaScript 引擎 6.6 发布,异步性能大幅提升
- 百词斩不复习_不背单词好用还是百词斩好用?
- 计算机系的土味情话,大学各专业土味情话
- 周记0053:0054
- RK3568 Android固件介绍、固件烧录、开机进系统
- Alpha版本冲刺(四)
- 【失败日记】手机内网穿透
- IterNet: Retinal Image Segmentation Utilizing Structural Redundancy in Vessel Networks
- English words page one
热门文章
- 【转】告诉你外语学习的真实方法及误区分析(精编版)-part 1
- Hive安装过程中出现 The reference to entity createDatabaseIfNotExist must end with the ';' delimiter.问题
- python谷歌翻译 频率限制_Django限制API访问频率常用方法解析
- 怎么把好几行弄成一行_【excle 如何多行变一行】excel中怎么把多行同一个人的数据变成一行?...
- 看看老板叫你造的马,被你“蹧”成什么样了丨极客官舍
- 华为OD机试 - 卡片组成的最大数字(Python) | 机试题算法思路
- 视频通话除了QQ还有什么软件可以实现?
- CKeditor 编辑器使用记录 (CKeditor 4 and 5 )
- [BZOJ2844]albus就是要第一个出场
- 【愚公系列】2021年11月 攻防世界-进阶题-MISC-032(就在其中)