解题思路

  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// Codeforces Round #488 by NEAR (Div. 1)

    题意:x轴-100和+100的有敌人飞船,纵坐标由输入数据给出,我方有2飞船在x轴0,y坐标待定.0时刻时敌人同时向我方2飞船发出光线,光线会穿透飞船打到敌人自己,问2飞船放在哪敌人损失最大? 假如- ...

  2. uboot-的start.S详细注解及分析

    原文地址:uboot-的start.S详细注解及分析 作者:zhouyg11 大多数bootloader都分为stage1和stage2两部分,u-boot也不例外.依赖于CPU体系结构的代码(如设备 ...

  3. gulp入门教程(详细注解)

    本文转载自http://www.ydcss.com/archives/18 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很 ...

  4. 通过调用门进行有特权级变换的转移,详细注解 对pmtest5.asm解释很详细.

    http://www.myexception.cn/operating-system/484288.html http://www.myexception.cn/operating-system/44 ...

  5. CF993C Careful Maneuvering bitset_枚举

    Code: #include<cstdio> #include<map> #include<iostream> #include<cmath> #inc ...

  6. 利用easyui的行编辑自动增加一行来进行增删有详细注解

    jQuery EasyUI 框架提供了创建网页所需的一切,帮助您轻松建立站点. easyui 是一个基于 jQuery 的框架,集成了各种用户界面插件. easyui 提供建立现代化的具有交互性的 j ...

  7. Android Spinner 下拉框简单应用 详细注解

    目录 Android Spinner 代码部分 Spinner代码介绍 核心代码 说在最后 @ Android Spinner Spinner 提供下拉列表式的输入方式,该方法可以有效节省手机屏幕上的 ...

  8. 【Codeforces】Round #488 (Div. 2) 总结

    [Codeforces]Round #488 (Div. 2) 总结 比较僵硬的一场,还是手速不够,但是作为正式成为竞赛生的第一场比赛还是比较圆满的,起码没有FST,A掉ABCD,总排82,怒涨rat ...

  9. [Codeforces Round#488]Div.2

    总结 这是我无聊透顶肝到三点半的一场 cf ,结果还真够无聊的 这套题涵盖了英语题,语文题,模拟题.注重考查了选手的英语素养能力,语文阅读能力和精湛的模拟和枚举能力.是不可多得的一套好题. 没什么单独 ...

随机推荐

  1. WP - 控件基础-按钮控件

    Button:HyperlinkButton:RepeatButton:ToggleButton 1.Button:    <button content="Button" ...

  2. java中的标识符

    程序员自己定义的名称,例如类名,方法名,变量等等 标识符命名的规则 1.只能由字母(a-z,A-Z),数字(0-9),下划线(_)和美元符号($)组成 2.不能以数字开头 3.不能与关键字重名 4.严 ...

  3. 使用DOS命令查找包含某一字符串的所有文件

      在windows系统下,来查找并修改指定目录下包含某一字符串的所有文件,麻烦又费时.其实在DOS命令中,提供了Findstr命令来查找指定的一个或多个文件文件中包含(或通过参数 /V来控制不包含) ...

  4. vue中使用base64进行加解密

    vue进行Base64加解密 背景 项目中需要对特殊字符进行处理,避免json和数据库的特殊字符(""等)冲突,刚好学了信息安全,干脆整个加解密,wkk.. 使用步骤 打开dos, ...

  5. 计蒜客 第 m 大的身份证号码 (水)

    链接 : Here! 思路 : 水题 代码 : #include <cstdio> #include <string> #include <iostream> #i ...

  6. 51nod-活动安排问题之二

    有若干个活动,第i个开始时间和结束时间是[Si,fi),活动之间不能交叠,要把活动都安排完,至少需要几个教室? 分析:能否按照之一问题的解法,每个教室安排尽可能多的活动,即按结束时间排序,再贪心选择不 ...

  7. PHP 7.1.15安装zabbix-3.2.6出现问题解决

    出现问题,显示 A non well formed numeric value encountered [zabbix.php:21 → require_once() → ZBase->run( ...

  8. Spring学习总结(16)——Spring AOP实现执行数据库操作前根据业务来动态切换数据源

    深刻讨论为什么要读写分离? 为了服务器承载更多的用户?提升了网站的响应速度?分摊数据库服务器的压力?就是为了双机热备又不想浪费备份服务器?上面这些回答,我认为都不是错误的,但也都不是完全正确的.「读写 ...

  9. 各项硬件使用剖析(一)---让你一眼就能区分瓶颈是Memory、processor ORdisk!

      

  10. hdu 1868 水

    #include<stdio.h> int main() { int n,m,i,j,k; while(scanf("%d",&n)!=EOF) { k=2; ...