Codeforces 993C. Careful Maneuvering(详细注解)
解题思路
- -100和+100是没有用的,只要知道左边的飞船轴和右边的飞船轴离y轴一样近即可。为简单起见,我们将左边的轴设为-1,右边的设为1。
- 某个点能摧毁的飞船一定是因为有两个飞船关于这个点对称。即若(-1,y1)和(1,y2)能互相摧毁,说明他们关于(0,(y1+y2)/2)对称。
- 所以我们只用求出左边的点y1与右边的点y2的和y1+y2。((y1+y2)/2为对称点,为了消除小数,我们不除以2)
- 记录每个y1+y2的值能消除左边的点的位置,和右边的点的位置。
- 找到两个不同的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(详细注解)的更多相关文章
- codeforces 993c//Careful Maneuvering// Codeforces Round #488 by NEAR (Div. 1)
题意:x轴-100和+100的有敌人飞船,纵坐标由输入数据给出,我方有2飞船在x轴0,y坐标待定.0时刻时敌人同时向我方2飞船发出光线,光线会穿透飞船打到敌人自己,问2飞船放在哪敌人损失最大? 假如- ...
- uboot-的start.S详细注解及分析
原文地址:uboot-的start.S详细注解及分析 作者:zhouyg11 大多数bootloader都分为stage1和stage2两部分,u-boot也不例外.依赖于CPU体系结构的代码(如设备 ...
- gulp入门教程(详细注解)
本文转载自http://www.ydcss.com/archives/18 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很 ...
- 通过调用门进行有特权级变换的转移,详细注解 对pmtest5.asm解释很详细.
http://www.myexception.cn/operating-system/484288.html http://www.myexception.cn/operating-system/44 ...
- CF993C Careful Maneuvering bitset_枚举
Code: #include<cstdio> #include<map> #include<iostream> #include<cmath> #inc ...
- 利用easyui的行编辑自动增加一行来进行增删有详细注解
jQuery EasyUI 框架提供了创建网页所需的一切,帮助您轻松建立站点. easyui 是一个基于 jQuery 的框架,集成了各种用户界面插件. easyui 提供建立现代化的具有交互性的 j ...
- Android Spinner 下拉框简单应用 详细注解
目录 Android Spinner 代码部分 Spinner代码介绍 核心代码 说在最后 @ Android Spinner Spinner 提供下拉列表式的输入方式,该方法可以有效节省手机屏幕上的 ...
- 【Codeforces】Round #488 (Div. 2) 总结
[Codeforces]Round #488 (Div. 2) 总结 比较僵硬的一场,还是手速不够,但是作为正式成为竞赛生的第一场比赛还是比较圆满的,起码没有FST,A掉ABCD,总排82,怒涨rat ...
- [Codeforces Round#488]Div.2
总结 这是我无聊透顶肝到三点半的一场 cf ,结果还真够无聊的 这套题涵盖了英语题,语文题,模拟题.注重考查了选手的英语素养能力,语文阅读能力和精湛的模拟和枚举能力.是不可多得的一套好题. 没什么单独 ...
随机推荐
- JAVA(TOMCAT)远程调试
当我们的项目部署到远程机器(开发环境和部署环境在不同的jvm下)中,而远程机器的数据和本地有可能不一样,这个时候我们可能需要连接到远程机器进行调试.为了解决这一问题,JAVA为我们提供了Java平台调 ...
- testdirector
TestDirector是全球最大的软件测试工具提供商Mercury Interactive公司生产的企业级测试管理工具,也是业界第一个基于Web的测试管理系统
- React 学习笔记:1-react 入门
接下来的项目里有用到react,最近一段时间主要关注于react 的学习.大部门都是网上的资料,学习整理并记录,加深记忆. React 是Facebook推出的用来构建用户界面的JavaScript库 ...
- hibernate用注解配置实体类的映射
一.注解类 1. @Table 声明了该实体bean映射指定的表(table),目录(catalog)和schema名字 2. @Id 声明了该实体bean的标识属性(对应表中的主键). 3. @Co ...
- JS 封装一个判断闰年平年的方法 aa(nian)
nn(2017) function nn (nian){ if(nian%4 == 0 && nian%100 !== 0 || nian%400 ==0 ) { alert(&quo ...
- Nginx全局变量
一.全局变量 $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?&qu ...
- [NOIP 2010] 关押罪犯 (二分+二分图判定 || 并查集)
题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...
- linux 遇到(vsftpd)—500 OOPS:chroot
今天在用vsftpd 时出现一个问题: 500 OOPS:chroot 解决办法: 1.关闭SELINUX [root@localhost ~]#vi /etc/sysconfig/selinux # ...
- AMPL下载使用
AMPL下载使用 依次执行以下操作 wget https://ampl.com/demo/amplide.linux64.tgz tar xzf amplide.linux64.tgz cd ampl ...
- Gradle学习总结——抓重点学Gradle
前言 网上关于Gradle的教程很多,但很多都是以"面"切入- 通过大量讲解其用法及其API分类来阐述.但Gradle API使用技巧众多,API更是成千上百,臣妾记不住呀.个人深 ...