题目链接:点击查看

题目大意:在 x = -100 的直线上有 n 个敌方飞船,在 x = 100 的直线上有 m 个敌方飞船,现在在 x = 0 的直线上可以选择两个点作为诱饵,使得两侧的飞船瞄准射击,问如何才能击落尽量多的飞船

题目分析:因为 n 和 m 只有 60,所以在 x == 0 时至多有 n * m 个交点,然后去 O( n^2 ) 去枚举交点暴力计算答案即可,对于每个交点来说,状压记录一下两侧可以击落的飞船,然后维护一下最大值就好了

更简单的一个思路就是,因为两侧的飞船分别位于 x = -100 和 x = 100 这两条直线上,换句话说,其交点在 x = 0 的位置等价于其中点的位置,所以直接维护所有中点的位置然后继续上述操作就可以了

一个自己踩到的坑就是,__builtin_popcount()函数的形式参数是 unsinged int,所以需要自己手写一个函数用来计算二进制下有多少个 “1”

还有一个坑就是两个诱饵所在的位置可能相同

代码:

//#pragma GCC optimize(2)
//#pragma GCC optimize("Ofast","inline","-ffast-math")
//#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e6+100;int a[N],b[N];map<int,pair<LL,LL>>mp;int cal(LL x)
{int ans=0;while(x){if(x&1)ans++;x>>=1;}return ans;
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int n,m;scanf("%d%d",&n,&m);for(int i=0;i<n;i++)scanf("%d",a+i);for(int i=0;i<m;i++)scanf("%d",b+i);for(int i=0;i<n;i++)for(int j=0;j<m;j++){mp[a[i]+b[j]].first|=(1LL<<i);mp[a[i]+b[j]].second|=(1LL<<j);}int ans=0;for(auto it1:mp)for(auto it2:mp)ans=max(ans,cal(it1.second.first|it2.second.first)+cal(it1.second.second|it2.second.second));printf("%d\n",ans);return 0;
}

CodeForces - 993C Careful Maneuvering(几何+暴力+状态压缩)相关推荐

  1. Codeforces 993C. Careful Maneuvering(详细注解)

    解题思路 -100和+100是没有用的,只要知道左边的飞船轴和右边的飞船轴离y轴一样近即可.为简单起见,我们将左边的轴设为-1,右边的设为1. 某个点能摧毁的飞船一定是因为有两个飞船关于这个点对称.即 ...

  2. Codeforces 718E.Matvey's Birthday dp+状态压缩

    题意 给定一个长度为n的字符串,字符集大小为8.两个点i,j之间有权值为1的边需要满足以下条件至少一个 1. |i-j|=1 2. si=sj 求图的直径和多少个有序点对之间的最短路长度等于直径 N≤ ...

  3. Codeforces 903F Clear The Matrix(状态压缩DP)

    题目链接 Clear The Matrix 题意 给定一个$4 * n$的矩形,里面的元素为$'.'$或$'*'$.现在有$4$种正方形可以覆盖掉$'*'$,正方形的边长分别为$1,2,3,4$. 求 ...

  4. 3690状态压缩+暴力

    题意:       给你一个矩阵,上面只有*和0(最大1000*1000),然后有t(最大100)组询问,每组询问给你一个小矩阵(最大50*50),问这t个矩阵中有多少个是在大矩阵中出现的. 思路: ...

  5. CodeForces - 620E New Year Tree(线段树+dfs序+状态压缩)

    题目链接:点击查看 题目大意:给出一棵无向树,每个节点都有一种颜色,接下来时m次操作: 1 x y:将x及其子树染成y的颜色 2 x:查询x及其子树上共有多少种不同的颜色 题目分析:看完这个题的第一反 ...

  6. CodeForces - 1288D Minimax Problem(二分+状态压缩)

    题目链接:点击查看 题目大意:给出一个n*m的矩阵,我们用maze[n][m]来表示每一个元素,现在我们需要选出其中 i 和 j 两行,i 和 j 可以相同,用这两行的元素构成一个新的数组a,构造规则 ...

  7. POJ - 3279 Fliptile(状态压缩+位运算+暴力)

    题目链接:点击查看 题目大意:给出一个n*m的01矩阵,为了好描述,我们设0和1是两个相反的状态,我们的目标是要将整个矩阵全部变成1,现在我们可以将某一个点(x,y)更改为相反的状态,不过相应的该点周 ...

  8. 计蒜客 A2236 马的管辖 暴力枚举 状态压缩

    题目描述 原题链接 分析 结果填空题, 不用考虑时间复杂度,直接暴力枚举每一种方案 5×55×55×5的棋盘, 每一个格子有放或不放马两种状态, 所以一共需要枚举2252^{25}225种方案 每一种 ...

  9. CodeForces 906C(状态压缩 +BFS)

    题目链接 题意:某人举办了一个party,邀请了他的朋友来,他的朋友也邀请了他们的朋友.etc.然后某人并不认识他朋友的朋友,这样聊天很尬,所以就让邀请他不认识的人的朋友给某人介绍.假设通过朋友C介绍 ...

最新文章

  1. C#LeetCode刷题之#278-第一个错误的版本(First Bad Version)
  2. Javascript基于对象三大特征
  3. ccs 移植创建新工程_3D生物打印器官新突破,模拟肺与肝脏,未来可能实现定制人类器官...
  4. ReactRouter的实现
  5. java bitmap取出数据库_bitmap一般如何取出其所表示的数据(以java为例)
  6. 蓝桥杯 ADV-214 算法提高 3-3求圆面积表面积体积
  7. verilog 中if....else语句以及case语句详细理解
  8. ASP.net AJAX 调用PageMethods实例
  9. C++请不要问我string s=”a”+”b”分配了几次内存
  10. webstorm 主题导入方法
  11. 我们写APP和小程序或者H5用的前端UI--ColorUI
  12. python中列表的使用
  13. 百度分享链接批量转存到百度网盘
  14. python bunch制作可导入数据_Python 之 Bunch Pattern
  15. 大唐集团(这个不敷衍了),js逆向:★★★★
  16. win7 计算机无法搜索,Win7电脑搜索功能不能用的解决方法
  17. python中re.sub函数
  18. Tampermonkey脚本
  19. 使用内网穿透frp做远程桌面连接
  20. 猫本来就长这样,为什么叫我重画?

热门文章

  1. java access dbq 参数_Java怎么连接access数据库,要求讲解详细一些
  2. SpringMVC实现简单登录
  3. 为何excel中数据无法计算机,excel表格内数据为何无法计算机-为什么EXCEL单元格内的数字不能运算...
  4. explain 之key rows extra
  5. Nginx服务器启停方式介绍
  6. SpringMVC的数据响应-页面跳转-返回ModelAndView形式1(应用)
  7. 未付服务网关限流作用
  8. 按指定格式拼接字符串
  9. php的常量和变量的区别,变量和常量的区别_在php当中常量和变量的区别
  10. python制作软件封面_用python给MP3加封面图片,修改作者,专辑等信息