[CF1041F Ray in the tube][数学]】的更多相关文章

http://codeforces.com/contest/1041/problem/F 题目大意: 下边界有n个给定点,上边界有m个给定点,可以从任意一个点发出一条激光,激光碰到边界会反射 激光到达边界必须打到整数点,问最多可以打到几个给定点 输入格式: 第一行两个整数n,y1​,表示下边界给定点的个数和下边界的纵坐标 第二行n个整数,表示给定点的横坐标 第三行两个整数m,y2​,表示上边界给定点的个数和上边界的纵坐标 第四行m个整数,表示给定点的横坐标 题解:设起点横坐标为Xa,步长为Dx,…
挂上Chester大神的解题报告 有一个思维跳跃的地方,就是不应该枚举所有的$B$点,而是应该在选定一个$A$点之后枚举距离计算. 然后我们发现枚举距离是$2^k$的长度就可以了,证明如下: 假如距离$d = 2^k$,那么对于每一个$A$点如果能被经过$a_p$的点弹到,需要满足$a_i\equiv a_p\ (Mod  \ 2d)$,而对所有的$B$点,如果能被经过$a_p$的点弹到,需要满足$b_i + d \equiv a_p \ (Mod \ 2d)$. 那么对于一些其他的距离,我们的…
不难发现起点必定是一个点. 每次间隔的距离一定是 2k2^k2k,关键就是要判断两点是否在同一跳跃距离上可被同时覆盖. 我们可以对上边进行 x1≡x_{1}\equivx1​≡ x2mod(2∗dx)x_{2} mod( 2*dx)x2​mod(2∗dx),这样对于多个点是否可以在距离为 dxdxdx 的情况下被同时访问做判断.我们开一个 mapmapmap,用于映射这些关键值的数量.即一旦得出一个关键值,在 mapmapmap 上进行自增即可. Code: #include<bits/stdc…
---恢复内容开始--- You are given a tube which is reflective inside represented as two non-coinciding, but parallel to OxOx lines. Each line has some special integer points — positions of sensors on sides of the tube. You are going to emit a laser ray in th…
Ray in the tube 感觉是套路题.. 如果确定一个差值x我们如何取确定答案呢, 我们把a[ i ] -> a[ i ] % (2 * x), 把b[ i ] -> (b[ i ] + k) % (2 * x), 值相同的都能同时射到. 同时我们能发现, 对于一个差值x如果它有奇数因子, 把它除掉之后会更优, 所以我们要check的x只有2的幂次. #include<bits/stdc++.h> #define LL long long #define fi first…
F. Ray in the tube 链接 题意: 有两条平行于x轴的直线A,B,每条直线上的某些位置有传感器.你需要确定A,B轴上任意两个整点位置$x_a$,$x_b$,使得一条光线沿$x_a→x_b$射出(碰到A,B后反射),能够碰到的传感器数量最多是多少. 每条直线上的传感器数量≤105,0≤xi≤109  分析: 很有意思的一道题. 发现和y没什么关系,只要确定$x_a$,$x_b$之间的水平距离差dx就行了. 然后寻找性质: 1.如果dx为奇数,那么dx一定可以用1来代替,并且不会更差…
昨天晚上全机房集体开\(Div2\),因为人傻挂两次\(B\)题的我开场就\(rank2000+\dots qwq\)于是慌乱之中的我就开始胡乱看题(口胡),于是看了\(F\dots\)(全机房似乎也就我一个人慌到心态爆炸) 起初想到的只有\(n^2\)的暴力,然而复杂度显然炸了,于是试图寻找规律,但是只想到一个假结论:忽略\(y\),然后取上面坐标为奇数的点数与下面坐标为偶数的点数的和与上面坐标为偶数的点数与下面坐标为奇数的点数的和,也即步长为\(1\) 但是显然这样过不了样例啊(上面的方法输…
题目链接 \(Description\) 有两条平行于\(x\)轴的直线\(A,B\),每条直线上的某些位置有传感器.你需要确定\(A,B\)轴上任意两个整点位置\(x_A,x_B\),使得一条光线沿\(x_A\to x_B\)射出(碰到\(A,B\)后反射),能够碰到的传感器数量最多是多少. 每条直线上的传感器数量\(\leq10^5,\ 0\leq x_i\leq 10^9\). \(Solution\) 由光的反射定律可知,光束接触直线的相邻两个点的水平距离是确定的,设这个距离为\(dx\…
题目链接:http://codeforces.com/contest/1041/problem/F 题意:给出一根无限长的管子,在二维坐标上表示为y1 <= y <= y2,其中 y1 上与 n 个点,y2 上有 m 个点,问在 y1 和 y2 上各选一个点,从其中一个点出发射到另外一个点并无限反射下去,可以触碰到 y1 和 y2 上的点和最大为多少. 题解:考虑射出去的线打到对面板上所需要走的距离dd,假设出发点为0,则打在自己这边上的点的坐标为{0,2d,4d,6d,8d,...}{0,2…
死于没有处理边界 题目描述 题目大意 在两面镜子上各选定一个整数位置的点 A 与 B,并从其中一个点向另一个射出一条光线,使得接收到光线的传感器数量尽可能的多.传感器不重叠. 题目分析 我们来初步考虑一下答案路径的形式. 1.$i$为奇数:那么我们以步长$1$去走,不仅一定经过最优答案的路径,还有可能会走过其他传感器.因此步长$1$囊括了所有$i$为奇数的情况. 2.$i$为偶数:沿用上续思路,用步长$2$去试试?发现$path=4k+2$.也就是说还剩下所有距离$4k$的点走不到.如果接着用步…