解题思路

  1. -100和+100是没有用的,只要知道左边的飞船轴和右边的飞船轴离y轴一样近即可。为简单起见,我们将左边的轴设为-1,右边的设为1。
  2. 某个点能摧毁的飞船一定是因为有两个飞船关于这个点对称。即若(-1,y1)和(1,y2)能互相摧毁,说明他们关于(0,(y1+y2)/2)对称。
  3. 所以我们只用求出左边的点y1与右边的点y2的和y1+y2。((y1+y2)/2为对称点,为了消除小数,我们不除以2)
  4. 记录每个y1+y2的值能消除左边的点的位置,和右边的点的位置。
  5. 找到两个不同的y1+y2,将他们能消除的左右边的位置分别合并,用(左边的数量+右边的数量)更新ans即可。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;//输入
int a[100];int b[100];
//mp存a[i]+b[j]放在set数组的第几个位置
map <int,int> mp;
//k表示set数组中有效数据的长度
int k = 0;
set<int> sl[20010],sr[20010],sll,srr;
set<int>::iterator it;
int main(){ios::sync_with_stdio(false);int n,m;cin >> n >> m;for(int i = 1;i <= n; ++i) cin >> a[i];for(int i = 1;i <= m; ++i) cin >> b[i];for(int i = 1;i <= n; ++i){for(int j = 1;j <= m; ++j){//如果a[i]+b[j]没出现过就给一个新的set //否则,就将这两个元素插入旧的set if(mp[a[i]+b[j]] == 0){mp[a[i]+b[j]] = ++k;sl[k].insert(i);sr[k].insert(j);} else{sl[mp[a[i]+b[j]]].insert(i);sr[mp[a[i]+b[j]]].insert(j);}}}int ans = 0;//W78的特判 if(k == 1){ans = sl[1].size()+sr[1].size();cout << ans << endl;return 0;}//将任意两个不同的set合并,两个set的大小之和即为这两个点能摧毁的飞行船的数量。 for(int i = 1;i <= k; ++i){for(int j = i+1;j <= k; ++j){sll = sl[i];srr = sr[i];for(it = sl[j].begin();it != sl[j].end(); it++){sll.insert(*it);    }for(it = sr[j].begin();it != sr[j].end(); it++){srr.insert(*it);    }ans = max(ans, (int)(sll.size()+srr.size()));}}cout << ans << endl;return 0;
}

Codeforces 993C. Careful Maneuvering(详细注解)相关推荐

  1. CodeForces - 993C Careful Maneuvering(几何+暴力+状态压缩)

    题目链接:点击查看 题目大意:在 x = -100 的直线上有 n 个敌方飞船,在 x = 100 的直线上有 m 个敌方飞船,现在在 x = 0 的直线上可以选择两个点作为诱饵,使得两侧的飞船瞄准射 ...

  2. cad lisp 背景遮罩_给文字批量添加边界偏移因子为1.1(或其他值)的背景遮罩的源程序(有详细注解)...

    本帖最后由 作者 于 2007-11-6 9:06:55 编辑 CAD2005以后版本中就有了背景遮罩功能,但其默认值为1.5多数情况下不太合适 在Autodesk官方网站技术支持知识库查询,其中关于 ...

  3. Word Maze单词迷宫C语言解法(详细注解)

    Word Maze单词迷宫C语言解法(详细注解) 题目描述 C语言代码 DFS算法 题目描述 Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.假设给定 ...

  4. JAVA实现导出mysql表结构到Word详细注解版

    JAVA实现导出mysql表结构到Word详细注解版 转自https://blog.csdn.net/weixin_42041153/article/details/109739073 本文在原文中一 ...

  5. Matlab实现Kmeans算法(每行代码标注详细注解)

    本文主要为了完成平日作业,并进一步加深对算法的理解.也希望对来访的读者有所帮助. 目录 一.什么是Kmeans算法 二.Kmeans算法的意义 三.Kmeans算法代码解析 1.关键概念 2.大致思路 ...

  6. linux下最简单多线程单文件socks5代理proxy服务器程序(仅一个c文件,带详细注解)

    2020.9.11 网上看的都比较复杂,GITHUB找了一个多线程的相对简单的MicroSocks项目,花了几周时间(没办法,菜鸟一个)改了一下,改成单文件,测试OK. /* wxl_socks5_p ...

  7. Matlab实现DBSCAN算法(每行代码标注详细注解)

    本文主要为了完成平日作业,并进一步加深对算法的理解.也希望对来访的读者有所帮助. 目录 一.什么是DBSCAN算法 二.DBSCAN算法的意义 三.DBSCAN算法代码解析 1.关键概念 2.大致思路 ...

  8. Java 游戏账号出租系统项目(超详细注解)

    Java 游戏账号出租系统项目 一级目录为包.二级目录为类 注解详细 debug调试更清晰 AccountRentApp(main) package accountrentsystem; import ...

  9. DeepLab v3+为啥可以封神?(论文讲解含超详细注解+中英文对照+配图)

    开始前,博主请求大家一定要看注解,博主的努力全在注解里,有帮助的记得一键三连呀! Encoder-Decoder with Atrous Separable Convolution for Seman ...

最新文章

  1. Java扫描注解下的包_使用Spring mvc 利用java的反射技术,来扫描对应包下的注解请求url 统一保存在数据库中...
  2. JAVA关系表达式解析微引擎
  3. 牛客题霸 NC3 链表中环的入口结点
  4. SQL日期时间格式自由转换大全
  5. ZOJ1654-Place the Robots【最大匹配,图论】
  6. 没有bug队——加贝——Python 练习实例 13,14
  7. python与线性代数 线性方程组的解集
  8. socket,ioctl获取ip
  9. 路孚特:金融行业数据复杂 成本高 难获取 看路孚特如何打破困局
  10. python停用词表整理_python停用词表
  11. 天天生鲜Django项目
  12. 平面向量内积坐标公式推导_向量内积的坐标表示.ppt
  13. 360校招之圈地运动
  14. 最简单的加密---异或加密
  15. 苹果春季发布会看点汇总
  16. 蓝桥杯 填空题 水题 等差素数列 C++ 简单暴力枚举
  17. 4种常见的鉴权方式及说明
  18. Multisim--软件相关使用技巧
  19. 视频和语音播放(进行中)
  20. 【算力网络】算力网络的发展趋势

热门文章

  1. 每日程序C语言48-字符串排序
  2. python日志_python日志处理
  3. C语言学习之输入4个整数,要求按由小到大的顺序输出。
  4. centos 6.3 mysql python 模块_CentOS安装python2.6以及MySQL-python
  5. mysql游标遍历修改_mysql使用游标遍历数据进行批量针对性更新数据,急求mysql大神解答...
  6. 数据结构课程设计---------最少换车次数问题
  7. 1.3 xss原理分析与剖析(4)
  8. WPF 自定义快捷键命令(COMMAND)(转)
  9. (一个)AngularJS获取贴纸Hello World
  10. JQuery的$(document).ready(function(){})与JS的window.onload 的各自优势!