昨天晚上全机房集体开\(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】的更多相关文章

  1. CodeForces 582A【multiset使用样例】

    题意: 给一些无序的数字,求解一个矩阵,使得矩阵的每一个元素都是行和列标志数的gcd,输出行标志数. 首先对数字进行排序.复杂度n*log(n^2). 这题的证明有官方的英文题解==在这直接贴英文题解 ...

  2. Codeforces 61B【怪在读题】

    搞不懂为什么DFS的写法崩了,然后乱暴力,因为题意不是很懂... 主要还是读题吧(很烦 #include <bits/stdc++.h> using namespace std; type ...

  3. Codeforces 1041F Ray in the tube (看题解)

    Ray in the tube 感觉是套路题.. 如果确定一个差值x我们如何取确定答案呢, 我们把a[ i ] -> a[ i ] % (2 * x), 把b[ i ] -> (b[ i ...

  4. 【淡墨Unity3D Shader计划】一间 创建一个游戏场景 &amp; 第一Shader写作

    本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨)  ...

  5. B. Lost Number【CF交互题 暴力】

    B. Lost Number[CF交互题 暴力] This is an interactive problem. Remember to flush your output while communi ...

  6. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  7. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  8. 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付

    前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...

  9. 【AutoMapper官方文档】DTO与Domin Model相互转换(上)

    写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...

随机推荐

  1. Golang的类型断言

    类型断言即判断一个变量是不是某个类型的实例,这个经常用在判断接口的类型,基本的格式: y, ok := x.(type) 上面的语句用于判断变量x是不是type类型,有两种结果: x是type类型的变 ...

  2. PAT L2-016 愿天下有情人都是失散多年的兄妹

    https://pintia.cn/problem-sets/994805046380707840/problems/994805061769609216 呵呵.大家都知道五服以内不得通婚,即两个人最 ...

  3. Rime 小狼毫 注意事项

    https://rime.im/https://github.com/rime/weasel/pulse 打不出中文可能是,没有五笔需要的文件: wubi_pinyin.schema.yamlCtrl ...

  4. AJAX返回值问题

    ajax同步方式获取返回值,必须以同步请求的的方式获取. //主函数部分 function confirm(id,...)//省略部分参数 { //...省略部分代码 //任务涉及专业 var Maj ...

  5. C#复习笔记(3)--C#2:解决C#1的问题(进入快速通道的委托)

    委托 前言:C#1中就已经有了委托的概念,但是其繁杂的用法并没有引起开发者太多的关注,在C#2中,进行了一些编译器上的优化,可以用匿名方法来创建一个委托.同时,还支持的方法组和委托的转换.顺便的,C# ...

  6. [转帖]SAP进阶:再论SAP权限

    SAP进阶:再论SAP权限 http://blog.vsharing.com/MilesForce/A634100.html 网上有不少关于权限的文章,多是转来转去,COPY的台湾某个人N年前的PPT ...

  7. CMake--List用法

    list(LENGTH <list><output variable>) list(GET <list> <elementindex> [<ele ...

  8. MT4下载历史数据

    这个网站只能下载2001年-当前时间前一个月的数据,还是挺全的.但是下载下来之后好像是一分钟图的,妈蛋其实我想要1小时图的EURUSD历史数据. 网站地址:http://www.fxfupan.com ...

  9. vue cli3 vue.config.js 配置详情

    module.exports = {   // 基本路径   baseUrl: process.env.NODE_ENV === 'production'     ? '/'     : '/',   ...

  10. 修改tomcat控制台title的方法

    修改tomcat控制台title的方法,参考:http://www.jspkongjian.net/news.jsp?id=1125,具体如图: