【做题】TCSRM591 Div1 500 PyramidSequences——数形结合&思维
题意:定义高度为\(x\)的金字塔数列为周期为\(2x-2\)的无限数列。它的每一个周期都是形如\(1,2,...,x-1,x,x-1,...,2\)的形式。记高度为\(x\)的金字塔数列第\(i\)个数为\(p_{x,i}\)
现在给出\(n\)和\(m\),求集合\(S = \{(x,y) | \, \exists i , x = A_{n,i}, y = A_{m,i}\}\)的大小。
\(n,m \leq 10^9\)
遇到此题似乎无从下手。在于我们无从直接处理数列。
考虑把\((x,y)\)的二元组放在二维坐标系上。那么,一个金字塔数列就是在来回反弹,而两个就是在二维网格图上来回反弹,直至到达四个终点中的任意一个。这个网格图的边长为\(n-1\)和\(m-1\)。于是形成了与坐标轴夹角为\(45^{\circ}\)的折线。
现在,我们要求的就是所到达的格点数量。设图边长分别为\(a\)和\(b\)。
问题在于一个结点到达多次只算一次。否则就通过镜面展开的套路,得到答案为\(\frac {ab} {gcd(a,b)}\)。这也就是我们所能走的路径长度。
考虑\(a,b\)互质的情况。那么,我们走的路径长度为\(ab\)。注意到图上也正好有\(ab\)个网格。因为我们只沿对角线走,所以所有经过结点的横坐标和纵坐标的和的奇偶性是一定的。考虑一个方格,它边上的4个格点中只有两个是有可能经过的,而要穿过这个方格,就只能走那两个格点的连线。显然,路径上的边是不重的。因此,每个方格最多被经过1次,则路径长度小于等于\(ab\)。而它事实上正等于\(ab\),这说明每个网格都被穿过了,那么,所有可能经过的格点都经过了。于是,经过的格点数就是\(\left\lceil \frac {(a+1)(b+1)} {2} \right\rceil\)。
而当\(a,b\)不互质时,设\(gcd(a,b)=d, \, a = a' d , \, b = b' d\),那就相当于把原来的网格放大\(d\)倍。每个小网格都变成了一个\(d \times d\) 的大网格。因此,穿过一个大网格时,还会再经过\(d-1\)个格点,它们只会经过1次。所以答案再加上\(a'b' \times (d-1)\)就可以了。
时间复杂度\(O(\log n)\)。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
class PyramidSequences {
public:
long long distinctPairs( int N, int M );
};
long long PyramidSequences::distinctPairs(int N, int M) {
N --;
M --;
ll d = __gcd(N,M);
ll x = N / d, y = M / d;
ll ret = ((x + 1) * (y + 1) + 1) / 2;
ret += x * y * (d-1);
return ret;
}
小结:TC的题目还是很有灵活性的。在数形结合基础上,拓展经典问题,这还是有难度的。
【做题】TCSRM591 Div1 500 PyramidSequences——数形结合&思维的更多相关文章
- poj 1430 Binary Stirling Number 求斯特林数奇偶性 数形结合| 斯特林数奇偶性与组合数的关系+lucas定理 好题
题目大意 求子集斯特林数\(\left\{\begin{matrix}n\\m\end{matrix}\right\}\%2\) 方法1 数形结合 推荐一篇超棒的博客by Sdchr 就是根据斯特林的 ...
- CodeM美团点评编程大赛复赛 做题感悟&题解
[T1] [简要题意] 长度为N的括号序列,随机确定括号的方向:对于一个已确定的序列,每次消除相邻的左右括号(右左不行),消除后可以进一步合并和消除直到不能消为止.求剩下的括号的期望.\(N \l ...
- TopCoder SRM502 Div1 500 贪心 01背包
原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-500.html SRM502 Div1 500 好题. 首先,如果已经确定了解决所有问题的优先级, ...
- AtCoder Grand Contest 11~17 做题小记
原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-11-to-20.html UPD(2018-11-16): ...
- AtCoder Grand Contest 1~10 做题小记
原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-1-to-10.html 考虑到博客内容较多,编辑不方便的情 ...
- POI做题笔记
POI2011 Conspiracy (2-SAT) Description \(n\leq 5000\) Solution 发现可拆点然后使用2-SAT做,由于特殊的关系,可以证明每次只能交换两个集 ...
- SAM 做题笔记(各种技巧,持续更新,SA)
SAM 感性瞎扯. 这里是 SAM 做题笔记. 本来是在一篇随笔里面,然后 Latex 太多加载不过来就分成了两篇. 标 * 的是推荐一做的题目. trick 是我总结的技巧. I. P3804 [模 ...
- C语言程序设计做题笔记之C语言基础知识(下)
C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...
- C语言程序设计做题笔记之C语言基础知识(上)
C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎 ...
随机推荐
- Yii GridView
- 【转】Loadrunder场景设计篇——添加windows Resource计数器和指标说明
转至:https://www.cnblogs.com/langhuagungun/p/8488270.html Loadrunder场景设计篇——添加windows Resource计数器和指标说明 ...
- Python大神成长之路: 第三次学习记录 集合 函数 装饰 re
学习记录day03 字符串可以直接切片,But字符串不可修改 字符串修改:生成了一个新的字符串 LIst修改,在原基础上修改(原内存上) 集合是一个无序的,不重复的数据组合,它的主要作用如 ...
- 【Hive学习之三】Hive 函数
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 apache-hive-3.1.1 ...
- HTTPS 之共享秘钥 公钥 及 私钥
HTTPS 之共享秘钥 公钥 及 私钥一 共享秘钥1.1 概念共享秘钥和我们生活中同一把锁的钥匙概念类似,对同一把锁来说,加锁时使用什么钥匙,解锁也必须使用同样的钥匙. 1.2 共享秘钥在HTTP传输 ...
- USB接口案例——多态和转型
其中,为传递和使用的匿名对象,即创建了对象,但是没有引用类和对象名来接收: 电脑类中的操作usb的成员方法中,要向下转型,毛主席讲的具体问题具体分析,不同的设备有不同的操作:
- PyCharm2017破解步骤
前段时间买了一套python的学习视频,附带一个Pycharm的安装包和注册码,现在注册码被JetBrains封杀了,不得已在网上找了一下破解的教程,在这里记录一下: 先找到破解补丁无需使用注册码,下 ...
- POJ 3662 Telephone Lines (二分 + 最短路)
Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone company is uncoop ...
- Django框架----命名空间模式
命名空间模式 即使不同的APP使用相同的URL名称,URL的命名空间模式也可以让你唯一反转命名的URL. 举个例子: project中的urls.py from django.conf.urls im ...
- checkbox 全选效果
html部分 <p id="all">全选</p> <input type="checkbox" /><br/> ...