题意:定义高度为\(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——数形结合&思维的更多相关文章

  1. poj 1430 Binary Stirling Number 求斯特林数奇偶性 数形结合| 斯特林数奇偶性与组合数的关系+lucas定理 好题

    题目大意 求子集斯特林数\(\left\{\begin{matrix}n\\m\end{matrix}\right\}\%2\) 方法1 数形结合 推荐一篇超棒的博客by Sdchr 就是根据斯特林的 ...

  2. CodeM美团点评编程大赛复赛 做题感悟&题解

    [T1] [简要题意]   长度为N的括号序列,随机确定括号的方向:对于一个已确定的序列,每次消除相邻的左右括号(右左不行),消除后可以进一步合并和消除直到不能消为止.求剩下的括号的期望.\(N \l ...

  3. TopCoder SRM502 Div1 500 贪心 01背包

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-500.html SRM502 Div1 500 好题. 首先,如果已经确定了解决所有问题的优先级, ...

  4. AtCoder Grand Contest 11~17 做题小记

    原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-11-to-20.html UPD(2018-11-16): ...

  5. AtCoder Grand Contest 1~10 做题小记

    原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-1-to-10.html 考虑到博客内容较多,编辑不方便的情 ...

  6. POI做题笔记

    POI2011 Conspiracy (2-SAT) Description \(n\leq 5000\) Solution 发现可拆点然后使用2-SAT做,由于特殊的关系,可以证明每次只能交换两个集 ...

  7. SAM 做题笔记(各种技巧,持续更新,SA)

    SAM 感性瞎扯. 这里是 SAM 做题笔记. 本来是在一篇随笔里面,然后 Latex 太多加载不过来就分成了两篇. 标 * 的是推荐一做的题目. trick 是我总结的技巧. I. P3804 [模 ...

  8. C语言程序设计做题笔记之C语言基础知识(下)

    C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...

  9. C语言程序设计做题笔记之C语言基础知识(上)

    C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎 ...

随机推荐

  1. Yii GridView

  2. 【转】Loadrunder场景设计篇——添加windows Resource计数器和指标说明

    转至:https://www.cnblogs.com/langhuagungun/p/8488270.html Loadrunder场景设计篇——添加windows Resource计数器和指标说明 ...

  3. Python大神成长之路: 第三次学习记录 集合 函数 装饰 re

    学习记录day03   字符串可以直接切片,But字符串不可修改 字符串修改:生成了一个新的字符串 LIst修改,在原基础上修改(原内存上)     集合是一个无序的,不重复的数据组合,它的主要作用如 ...

  4. 【Hive学习之三】Hive 函数

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 apache-hive-3.1.1 ...

  5. HTTPS 之共享秘钥 公钥 及 私钥

    HTTPS 之共享秘钥 公钥 及 私钥一 共享秘钥1.1 概念共享秘钥和我们生活中同一把锁的钥匙概念类似,对同一把锁来说,加锁时使用什么钥匙,解锁也必须使用同样的钥匙. 1.2 共享秘钥在HTTP传输 ...

  6. USB接口案例——多态和转型

    其中,为传递和使用的匿名对象,即创建了对象,但是没有引用类和对象名来接收: 电脑类中的操作usb的成员方法中,要向下转型,毛主席讲的具体问题具体分析,不同的设备有不同的操作:

  7. PyCharm2017破解步骤

    前段时间买了一套python的学习视频,附带一个Pycharm的安装包和注册码,现在注册码被JetBrains封杀了,不得已在网上找了一下破解的教程,在这里记录一下: 先找到破解补丁无需使用注册码,下 ...

  8. POJ 3662 Telephone Lines (二分 + 最短路)

    Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone company is uncoop ...

  9. Django框架----命名空间模式

    命名空间模式 即使不同的APP使用相同的URL名称,URL的命名空间模式也可以让你唯一反转命名的URL. 举个例子: project中的urls.py from django.conf.urls im ...

  10. checkbox 全选效果

    html部分 <p id="all">全选</p> <input type="checkbox" /><br/> ...