【做题】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是相当灵活的,用于执行计算机程序能完成的几乎 ...
随机推荐
- maven 知识
1. maven 环境配置 Maven 3.3 要求 JDK 1.7 或以上 Maven 3.2 要求 JDK 1.6 或以上 Maven 3.0/3.1 要求 JDK 1.5 或以上 2. ...
- 17.Setters/getters
知道类的成员变量何时因某种原因发生变化通常很有用.也可能需要以某种方式封装其访问. 为此,GDScript使用 setget 关键字提供了一个 setter/getter 语法.在变量定义后可直接使用 ...
- Spring Security实现RBAC权限管理
Spring Security实现RBAC权限管理 一.简介 在企业应用中,认证和授权是非常重要的一部分内容,业界最出名的两个框架就是大名鼎鼎的 Shiro和Spring Security.由于Spr ...
- html5-超级链接
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- DSO安装试运行
参考DSO初探 其中Pangolin安装的时候could not find GLEW,参考这里 libx11-dev libxmu-dev libglu1-mesa-dev libgl2ps-dev ...
- hashcat 中文文档
hashcat 描述 hashcat是世界上最快,最先进的密码恢复工具. 此版本结合了以前基于CPU的hashcat(现在称为hashcat-legacy)和基于GPU的oclHashcat. H ...
- JDK历史版本下载地址
JDK历史版本下载地址: http://www.oracle.com/technetwork/java/archive-139210.html -startupplugins/org.eclipse. ...
- 前端框架VUE----导入Bootstrap以及jQuery的两种方式
Vue引入bootstrap主要有两种方法 方法一:在main.js中引入,此方法导入的bootstrap中对于html,body的一些预设置的css样式可能无效. 一.引入jQuery 在当前项目的 ...
- 计算概论(A)/基础编程练习(数据成分)/3:整数的个数
#include<stdio.h> int main() { ] = {}; // 输入k个正整数 scanf("%d",&k); // 循环读入和进行算术 w ...
- AdminLTE模板使用
AdminLTE介绍: AdminLTE是一款建立在bootstrap和jquery之上的开源的模板主题工具,它提供了一系列响应的,可重复使用的组件,并内置了多个模板页面;同时自适应多种屏幕分辨率,兼 ...