Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/131072 K (Java/Others)

问题描述

设SS是一个数字串,定义函数occ(S,x)occ(S,x)表示SS中数字xx的出现次数。

例如:S=(1,2,2,1,3),occ(S,1)=2,occ(S,2)=2,occ(S,3)=1S=(1,2,2,1,3),occ(S,1)=2,occ(S,2)=2,occ(S,3)=1。

如果对于任意的ii,都有occ(u,i)=occ(w,i)occ(u,i)=occ(w,i),那么我们认为数字串uu和ww匹配。

例如:(1,2,2,1,3)\approx(1,3,2,1,2)(1,2,2,1,3)≈(1,3,2,1,2)。

对于一个数字串SS和一个正整数kk,如果SS可以分成若干个长度为kk的连续子串,且这些子串两两匹配,那么我们称kk是串SS的一个完全阿贝尔周期。

给定一个数字串SS,请找出它所有的完全阿贝尔周期。

输入描述

输入的第一行包含一个正整数T(1\leq T\leq10)T(1≤T≤10),表示测试数据的组数。

对于每组数据,第一行包含一个正整数n(n\leq 100000)n(n≤100000),表示数字串的长度。

第二行包含nn个正整数S_1,S_2,S_3,…,S_n(1\leq S_i\leq n)S

​1

​​ ,S

​2

​​ ,S

​3

​​ ,…,S

​n

​​ (1≤S

​i

​​ ≤n),表示这个数字串。

输出描述

对于每组数据,输出一行若干个整数,从小到大输出所有合法的kk。

输入样例

2

6

5 4 4 4 5 4

8

6 5 6 5 6 5 5 6

输出样例

3 6

2 4 8

【题解】



可以知道这个周期k一定是n的一个因数。

所谓的两两相同。其实就是全都相同。

涉及到两个“集合”是否相同的判断.

做法是

把第一个集合里面的元素全都加到平衡树里面。

然后第二个集合里面。遇到一个元素就尝试在平衡树里面删除掉这个元素。

如果发现没有这个元素就表示不相同。

最后如果平衡树不为空也不相同。

以上判断都做完之后就可以判断两个集合是相同的了。

我们不必写一个平衡树。用现成的map即可。

枚举k

nextj..nextj+k-1.代表一段区间。

和1..k区间比较是否”相同即可”;

如果一个元素的map值为0了。就要erase掉。

这样才能用empty()函数判断map是否为空。

#include <cstdio>
#include <map> using namespace std;
const int MAXN = 101000; int t,n,a[MAXN];
map <int,int> dic; int main()
{
//freopen("F:\\rush.txt", "r", stdin);
scanf("%d", &t);
while (t--)
{
bool flag = false;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
for (int k = 1;k <= n;k++)
if ((n%k) == 0)
{
int j = 1;
int nextj = 1 + k;
bool judge = true;
while (nextj <= n)
{
dic.clear();
for (int l = 1; l <= k; l++)
dic[a[l]]++;
for (int l = nextj; l <= nextj + k - 1; l++)
{
dic[a[l]]--;
if (dic[a[l]] == 0)
dic.erase(a[l]);
}
if (!dic.empty())
{
judge = false;
break;
}
nextj += k;
}
if (judge)
{
if (!flag)
printf("%d", k);
else
printf(" %d", k);
flag = true;
}
}
printf("\n");
}
return 0;
}

【29.27%】【hdu 5908】Abelian Period的更多相关文章

  1. 【改革春风吹满地 HDU - 2036 】【计算几何-----利用叉积计算多边形的面积】

    利用叉积计算多边形的面积 我们都知道计算三角形的面积时可以用两个邻边对应向量积(叉积)的绝对值的一半表示,那么同样,对于多边形,我们可以以多边形上的一个点为源点,作过该点并且过多边形其他点中的某一个的 ...

  2. 【HDU 5647】DZY Loves Connecting(树DP)

    pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...

  3. 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  4. 【二分】【最长上升子序列】HDU 5489 Removed Interval (2015 ACM/ICPC Asia Regional Hefei Online)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5489 题目大意: 一个N(N<=100000)个数的序列,要从中去掉相邻的L个数(去掉整个区间 ...

  5. 【贪心】【模拟】HDU 5491 The Next (2015 ACM/ICPC Asia Regional Hefei Online)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5491 题目大意: 一个数D(0<=D<231),求比D大的第一个满足:二进制下1个个数在 ...

  6. 【动态规划】【二分】【最长上升子序列】HDU 5773 The All-purpose Zero

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5773 题目大意: T组数据,n个数(n<=100000),求最长上升子序列长度(0可以替代任何 ...

  7. 【动态规划】【KMP】HDU 5763 Another Meaning

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5763 题目大意: T组数据,给两个字符串s1,s2(len<=100000),s2可以被解读成 ...

  8. 【归并排序】【逆序数】HDU 5775 Bubble Sort

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5775 题目大意: 冒泡排序的规则如下,一开始给定1~n的一个排列,求每个数字在排序过程中出现的最远端 ...

  9. 【中国剩余定理】【容斥原理】【快速乘法】【数论】HDU 5768 Lucky7

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 题目大意: T组数据,求L~R中满足:1.是7的倍数,2.对n个素数有 %pi!=ai  的数 ...

随机推荐

  1. js02 变量数据类型

    变量 JavaScript 是一种弱类型的脚本语言 var c = 3:即变量的声明(变量使用之前必须加var声明,编程规范) 变量的命名规则! 1.变量命名必须以字母或是下标符号”_”或者”$”为开 ...

  2. 2.FastJson公司--阿里巴巴开源的速度最快的Json和对象转换工具

    转自:https://blog.csdn.net/gongpulin/article/details/52062532 这是关于FastJson的一个使用Demo,在Java环境下验证的 这是关于Fa ...

  3. Android 多线程下载,断点续传,线程池

    你可以在这里看到这个demo的源码: https://github.com/onlynight/MultiThreadDownloader 效果图 这张效果图是同时开启三个下载任务,限制下载线程数量的 ...

  4. BZOJ2631: tree(LCT)

    Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2 ...

  5. MockServer jar包安装

    github地址: https://github.com/jamesdbloom/mockserver 1. org.apache.maven.plugin-tools:maven-plugin-an ...

  6. 一、Docker安装

    原文:一.Docker安装 如果没有特殊要求关闭selinux!关闭selinux!关闭selinux!重要事情说三遍.这个坑活活让我重装了3.4遍系统才发现问题 本系列基于Centos系统安装,包括 ...

  7. JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)

    本文实例总结了JS数组排序技巧.分享给大家供大家参考,具体如下: 1.冒泡排序 var temp = 0; for (var i = 0; i < array.length; i++) { fo ...

  8. Moodle 中文 API 之 文件管理API

    File API  文件管理 文件夹 1. 概述 2. 文件域 2.1 命名文件域 3. 提供文件给用户 4. 从用户那获取文件 5. 样例 5.1 浏览文件 5.2 移动文件 5.3 文件列表 5. ...

  9. 数学定理证明机械化的中国学派(II)

    所谓"学派"是指:存在一帮人,具有同样或接近的学术观点或学术立场,採用某种特定的"方法"(或途径),在一个学术方向上共同开展工作.而且做出了相当有迎影响的学术成 ...

  10. ADO.net简单增删改查

    嘿嘿,又到了总结了的时间,今天我们学习了ADO.net,什么是ADO.NET:ADO.NET就是一组类库,这组类库可以让我们通过程序的方式访问数据库,就像System.IO下的类操作文件一样, Sys ...