Codeforces 582C. Superior Periodic Subarrays(数学+计数)
首先可以把 i mod n=j mod n的看成是同一类,i mod s=j mod s的也看成是同一类,也就是i mod gcd(s,n)的是同一类,很好理解,但是不会数学证明...大概可以想成数轴上一点可以向左向右跳s或n,根据错位相消能互达的两点最小距离为gcd(s,n),所以如果选择点i必须满足a(i)>=a(i+k*gcd(s, n))。
于是可以枚举d表示gcd(s, n),处理出所有可以被选择的点,1表示可选,0表示不可选,组成一个01序列,倍增一次后求出f[i]表示每一个点出发最长的连续的1,再预处理出cnt[i]表示1~i中gcd(i, n)==d的个数,最后枚举起点,sigma(cnt[f[i]])即为这个gcd(s, n)的贡献。
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#define ll long long
using namespace std;
const int maxn=, inf=1e9+;
int n;
int a[maxn], g[maxn], mx[maxn], can[maxn], f[maxn], cnt[maxn];
ll ans;
void read(int &k)
{
int f=; k=; char c=getchar();
while(c<'' || c>'') c=='-' && (f=-), c=getchar();
while(c<='' && c>='') k=k*+c-'', c=getchar();
k*=f;
}
inline int gcd(int a, int b){return b?gcd(b, a%b):a;}
int main()
{
read(n);
for(int i=;i<n;i++) read(a[i]);
for(int i=;i<=n;i++) g[i]=gcd(i, n);
for(int d=;d<=n;d++)
if(!(n%d))
{
for(int i=;i<d;i++) mx[i]=;
for(int i=;i<n;i++) mx[i%d]=max(mx[i%d], a[i]);
for(int i=;i<n;i++) can[i]=can[i+n]=(a[i]==mx[i%d]);
for(int i=(n<<)-;~i;i--) f[i]=min(n-, (can[i]?f[i+]+:));
for(int i=;i<=n;i++) cnt[i]=cnt[i-]+(g[i]==d);
for(int i=;i<n;i++) ans+=cnt[f[i]];
}
printf("%lld\n", ans);
}
Codeforces 582C. Superior Periodic Subarrays(数学+计数)的更多相关文章
- Codeforces Round #323 (Div. 2) E - Superior Periodic Subarrays
E - Superior Periodic Subarrays 好难的一题啊... 这个博客讲的很好,搬运一下. https://blog.csdn.net/thy_asdf/article/deta ...
- 【CodeForces】582 C. Superior Periodic Subarrays
[题目]C. Superior Periodic Subarrays [题意]给定循环节长度为n的无限循环数列,定义(l,s)表示起点为l的长度为s的子串,(l,s)合法要求将子串从该起点开始以s为循 ...
- Codeforces 1009 E. Intercity Travelling(计数)
1009 E. Intercity Travelling 题意:一段路n个点,走i千米有对应的a[i]疲劳值.但是可以选择在除终点外的其余n-1个点休息,则下一个点开始,疲劳值从a[1]开始累加.休息 ...
- [Codeforces 1178D]Prime Graph (思维+数学)
Codeforces 1178D (思维+数学) 题面 给出正整数n(不一定是质数),构造一个边数为质数的无向连通图(无自环重边),且图的每个节点的度数为质数 分析 我们先构造一个环,每个点的度数都是 ...
- Codeforces 558E A Simple Task(计数排序+线段树优化)
http://codeforces.com/problemset/problem/558/E Examples input 1 abacdabcda output 1 cbcaaaabdd input ...
- Codeforces 627 A. XOR Equation (数学)
题目链接:http://codeforces.com/problemset/problem/627/A 题意: 告诉你s 和 x,a + b = s a xor b = x a, b > ...
- Codeforces Beta Round #2B(dp+数学)
贡献了一列WA.. 数学很神奇啊 这个题的关键是怎么才能算尾0的个数 只能相乘 可以想一下所有一位数相乘 除0之外,只有2和5相乘才能得到0 当然那些本身带0的多位数 里面肯定含有多少尾0 就含有多少 ...
- HDU 5441 Travel (并查集+数学+计数)
题意:给你一个带权的无向图,然后q(q≤5000)次询问,问有多少对城市(城市对(u,v)与(v,u)算不同的城市对,而且u≠v)之间的边的长度不超过d(如果城市u到城市v途经城市w, 那么需要城市u ...
- codeforces 803C Maximal GCD(GCD数学)
Maximal GCD 题目链接:http://codeforces.com/contest/803/problem/C 题目大意: 给你n,k(1<=n,k<=1e10). 要你输出k个 ...
随机推荐
- 面试之HTTP基础(不断完善中)
目录 1. HTTP状态码 2.Cookie和Session Cookie Session 3.短连接与长连接 4.HTTPs 加密 5.Http和https的区别 6.HTTP/1.0 与 HTTP ...
- Android 不同分辨率下调整界面
Android Settings中有修改Disaply size的界面,通过修改Display size,能够修改屏幕分辨率. 由于修改了屏幕分辨率,有可能导致同一界面在不同的分辨率下显示出错(内容显 ...
- Windows下使用7-zip命令自动备份文件
在上一篇博文中,介绍了使用WinRAR自动备份文件,后来改用了腾讯云服务器,上面默认没有安装WinRAR,只有7-zip,又不想在服务器上安装许多软件,就查了下7-zip的命令,贴出来备忘~ 系统环境 ...
- CSS3实现图片渐入效果
很多网站都有那种图片渐入的效果,如:http://www.mi.com/minote/,这种效果用css3和一些js实现起来特别简单. 拿我之前做的页面来说一下怎么利用css3来实现图片渐入效果. 下 ...
- 20181113-7 Beta阶段第1周/共2周 Scrum立会报告+燃尽图 04
作业要求:[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2386] 版本控制:[https://git.coding.net/lglr2 ...
- 王者荣耀交流协会第一次scrum会议
照片: 拍照的人是我(高远博),没有出镜.开会时间是17:00到17:37. 昨天的成绩: (1)优化了折线图界面 今天的计划: (1)小组成员汇报昨日成果. (2)小组成员继续推进任务. 遇到的困难 ...
- hdu 5524
由于是完全二叉树,所以我们可以预先知道整棵树的形状,因此可以判断根节点的两个子节点哪个是满二叉树,哪个不是满二叉树(必然是一边满,一边不满),对于满的子节点,我们可以直接求出它的不同子树的个数,也就是 ...
- erlang调优方法
1. 来自Scaling Erlang的方法 内核调优: # Increase the ipv4 port range: sysctl -w net.ipv4.ip_local_port_range= ...
- 设计模式--Restful笔记(一)
一.REST基础概念 首先REST是 Representational State Transfer 的缩写,如果一个架构符合REST原则,它就是RESTful架构. 在REST中的一切都被认为是一种 ...
- CentOS yum 安装LAMP PHP5.4版本
CentOS yum 安装LAMP PHP5.4版本 [日期:2015-06-04] 来源:Linux社区 作者:rogerzhanglijie [字体:大 中 小] Linux系统版本:C ...