HDU5908-Abelian Period
来源:互联网 发布:盛科网络 营收 编辑:程序博客网 时间:2024/06/14 10:06
Abelian Period
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/131072 K (Java/Others)Total Submission(s): 455 Accepted Submission(s): 198
Problem Description
Let S be a number string, and occ(S,x) means the times that number x occurs in S .
i.e.S=(1,2,2,1,3),occ(S,1)=2,occ(S,2)=2,occ(S,3)=1 .
Stringu,w are matched if for each number i , occ(u,i)=occ(w,i) always holds.
i.e.(1,2,2,1,3)≈(1,3,2,1,2) .
LetS be a string. An integer k is a full Abelian period of S if S can be partitioned into several continous substrings of length k , and all of these substrings are matched with each other.
Now given a stringS , please find all of the numbers k that k is a full Abelian period of S .
i.e.
String
i.e.
Let
Now given a string
Input
The first line of the input contains an integer T(1≤T≤10) , denoting the number of test cases.
In each test case, the first line of the input contains an integern(n≤100000) , denoting the length of the string.
The second line of the input containsn integers S1,S2,S3,...,Sn(1≤Si≤n) , denoting the elements of the string.
In each test case, the first line of the input contains an integer
The second line of the input contains
Output
For each test case, print a line with several integers, denoting all of the number k . You should print them in increasing order.
Sample Input
265 4 4 4 5 486 5 6 5 6 5 5 6
Sample Output
3 62 4 8
Source
BestCoder Round #88
题意:设S是一个数字串,函数occ(S,x)occ(S,x)表示S中数字x的出现次数。如果对于任意的i,都有occ(u,i)=occ(w,i)occ(u,i)=occ(w,i),那么数字串u和w匹配。对于一个数字串S和一个正整数k,如果S可以分成若干个长度为k的连续子串,且这些子串两两匹配,那么k是串S的一个完全阿贝尔周期。给定一个数字串S,找出它所有的完全阿贝尔周期。
#include <iostream>#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>using namespace std;const int INF=0x3f3f3f3f;int main(){ int t,n; int a[100090],x[100090],b[100090],c[100090]; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%d",&a[i]); int sum=0; for(int i=1; i<=n/2; i++) { if(n%i==0) { for(int j=1;j<1+i;j++) b[j-1]=a[j]; sort(b,b+i); int k=0,flag=1; for(int j=i+1;j<=n;j++) { c[k++]=a[j]; if(k==i) { sort(c,c+i); for(int p=0;p<i;p++) { if(c[p]!=b[p]) {flag=0;break;} } k=0; } if(!flag) break; } if(flag) x[sum++]=i; } } for(int i=0; i<sum; i++) printf("%d ",x[i]); printf("%d\n",n); } return 0;}
0 0
- HDU5908-Abelian Period
- hdu5908 Abelian Period (water)
- HDU5908 Abelian Period
- HDU5908 Abelian Period(模拟暴力)
- hdu5908 Abelian Period 暴力 小小小小的优化
- Abelian Period
- Abelian Period
- 【HDU 5908 Abelian Period】
- 5908 Abelian Period
- 【hdoj5908】Abelian Period
- HDU 5908 Abelian Period
- HDU 5908 Abelian Period
- hdoj-【5908 Abelian Period】
- 【HDOJ】5908 Abelian Period
- 【29.27%】【hdu 5908】Abelian Period
- hdu 5908 Abelian Period (枚举)
- hdu 5908 Abelian Period 模拟
- HDU-5908 Abelian Period(思维)
- vmware linux 硬盘扩容
- Android通过WebView选择文件上传(支持直接调起相机等应用)
- c++语言表达的相应形式
- C++基础_04
- poj 1236 Network of Schools(强连通分量构造强连通图)
- HDU5908-Abelian Period
- 经典算法学习——求二叉树的高度
- 数据结构之线性结构--单链表
- 面试问题
- codeforces 486B OR in Matrix(位运算)
- Qt数据库 QSqlQueryModel实例操作
- 《卓有成效的程序员》笔记
- 最小堆第k小的元素与给定x的大小关系(编程题)
- java实现快速排序(利用随机索引)