Codeforces | CF1041F 【Ray in the tube】
昨天晚上全机房集体开\(Div2\),因为人傻挂两次\(B\)题的我开场就\(rank2000+\dots qwq\)于是慌乱之中的我就开始胡乱看题(口胡),于是看了\(F\dots\)(全机房似乎也就我一个人慌到心态爆炸)
起初想到的只有\(n^2\)的暴力,然而复杂度显然炸了,于是试图寻找规律,但是只想到一个假结论:忽略\(y\),然后取上面坐标为奇数的点数与下面坐标为偶数的点数的和与上面坐标为偶数的点数与下面坐标为奇数的点数的和,也即步长为\(1\)
但是显然这样过不了样例啊(上面的方法输出\(2\dots\)然而答案是\(3\)),因为没有考虑在上面和下面选的点的坐标奇偶性相同的情况,也即步长为\(2k(k\in N_+)\)的情况,但是如果要枚举\(\forall k\in [1,5\cdot10^8]\)的话显然复杂度还是不对,于是切\(F\)题的幻想就此破灭\(qwq\)(所以我把CD都切了(逃))
于是经过一番仔\((can)\)细\((kao)\)思\((ti)\)考\((jie)\)发现只需要枚举步长为\(2^i(i\in[0,29])\)即可且\(y\)坐标可以忽略,证明如下:
对\(y\)坐标可以忽略的解释:考虑\(y\)坐标在步长一定时只会影响\(ray\)的斜率,而反射时斜率取相反数,所以显然在\(y\)坐标差一定的情况下,步长总是定值,反射点也总是固定的(口胡),所以不妨忽略\(y\)坐标的影响(可以画图模拟一下)
假设步长不为\(2^k(k\in N)\)则一定可以表示为\(2^l\cdot (2p+1)(l,p\in N)\),此时我们作出从某一点出发步长分别为\(2^l,2^l\cdot(2p+1)(l,p\in N)\)的\(ray\)的路径图像(假设此时\(l=1,p=3\),点\((2,0)\)是两条\(ray\)的一个公共点,则步长分别为\(2,6\))
不难发现在步长不等于\(2^l(l\in N)\)时,步长为\(2^l\cdot (2p+1)(l,p\in N)\)的\(ray\)的反射点与步长为\(2^l\)的\(ray\)的反射点完全重合且反射点密度小于步长为\(2^l\)的\(ray\)的反射点密度,所以对于所有步长非\(2^k(k\in N)\)的\(ray\)一定会存在一个更优解使得\(ans\)更大,由此可得只需判断步长为\(2^k(k\in N)\)的情况即可
所以正解就是枚举对于所有的出发点,步长为\(2^i(i\in[0,29])\)的情况,对所有的\(ans\)取\(max\)即可,每次枚举\(i\)对所有坐标分上下对\(2^{i+1}\)取模分类,用\(map\)存余数为\(r(r\in[0,2^{i+1}-1])\)的坐标个数,时间复杂度为\(O((log10^9)\cdot(n+m))\)
\(AC\)代码\(\downarrow\downarrow\downarrow\)
#include<cstdio>//CF1041F
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<map>
using namespace std;
const int N=1e5+5;
int n,m,y,a[N],b[N],base2[31],ans,LUOGU;
void solve(int u){
map<int,int>cntd,cntu;
int mod=base2[u+1];
for(int i=1;i<=n;i++){
cntd[a[i]%mod]++;
}
for(int i=1;i<=m;i++){
cntu[b[i]%mod]++;
}
for(int i=1;i<=n;i++){
ans=max(ans,cntd[a[i]%mod]+cntu[(a[i]+base2[u])%mod]);
}
for(int i=1;i<=m;i++){
ans=max(ans,cntu[b[i]%mod]+cntd[(b[i]+base2[u])%mod]);
}
}
int main(){
for(int i=0;i<=30;i++){
base2[i]=(1<<i);
}
scanf("%d%d",&n,&y);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
scanf("%d%d",&m,&y);
for(int i=1;i<=m;i++){
scanf("%d",&b[i]);
}
for(int i=0;i<=29;i++){
solve(i);
}
printf("%d\n",max(ans,2));
return 0;
}
Codeforces | CF1041F 【Ray in the tube】的更多相关文章
- CodeForces 582A【multiset使用样例】
题意: 给一些无序的数字,求解一个矩阵,使得矩阵的每一个元素都是行和列标志数的gcd,输出行标志数. 首先对数字进行排序.复杂度n*log(n^2). 这题的证明有官方的英文题解==在这直接贴英文题解 ...
- Codeforces 61B【怪在读题】
搞不懂为什么DFS的写法崩了,然后乱暴力,因为题意不是很懂... 主要还是读题吧(很烦 #include <bits/stdc++.h> using namespace std; type ...
- Codeforces 1041F Ray in the tube (看题解)
Ray in the tube 感觉是套路题.. 如果确定一个差值x我们如何取确定答案呢, 我们把a[ i ] -> a[ i ] % (2 * x), 把b[ i ] -> (b[ i ...
- 【淡墨Unity3D Shader计划】一间 创建一个游戏场景 & 第一Shader写作
本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...
- B. Lost Number【CF交互题 暴力】
B. Lost Number[CF交互题 暴力] This is an interactive problem. Remember to flush your output while communi ...
- 【疯狂造轮子-iOS】JSON转Model系列之二
[疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...
- 【疯狂造轮子-iOS】JSON转Model系列之一
[疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...
- 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付
前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...
- 【AutoMapper官方文档】DTO与Domin Model相互转换(上)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
随机推荐
- ES使用C#添加和更新文档
ElasticSearch 使用C#添加和更新文档 这是ElasticSearch 2.4 版本系列的第四篇: 第一篇:ES1:Windows下安装ElasticSearch 第二篇:ES2:Elas ...
- python Drools
python Drools - 国际版 Binghttps://cn.bing.com/search?q=python+Drools&qs=n&FORM=BESBTB&sp=- ...
- SpringMVC+Spring+Mybatis+AngularJS 多规格保存示例代码
insert时拿到最新增加的id值 绑定参数 js 实体类 Service实现类 Controller
- jQuery EasyUI布局容器layout实例精讲
这个布局容器,有五个区域:北.南.东.西和中心. 他中心地区面板是必需的,但是边缘地区面板是可选的.每一个边缘地区面板可以缩放的拖动其边境, 他们也可以通过点击其收缩触发.布局可以嵌套,从而用户可以建 ...
- Day 4-9 subprocess模块
我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python ...
- win10查看无线密码
- Python 中关于 round 函数的小坑
参考: http://www.runoob.com/w3cnote/python-round-func-note.html
- python学习笔记(4)-基本数据类型-数字类型及操作
大学mooc 北京理工大学 python语言程序设计课程学习笔记 一.整数类型 可正可负,没有取值范围的限制(这个与c不同,c要考虑数据类型的存储空间).如pow(x,y),计算x的y次方,pow(2 ...
- windows 10 & task view & shortcut
windows 10 & task view & shortcut Win + Tab https://blogs.windows.com/windowsexperience/2014 ...
- list类型功能剖析
append 向后追加 name_list=["eirc","alex","tony"] name_list.append('seven' ...