HDU 5908 Abelian Period
来源:互联网 发布:路由器wifi网络延迟高 编辑:程序博客网 时间:2024/06/05 08:53
题目分析
这道题告诉我们虽然是暴力题目但是仍然要有策略的暴力,首先这道题写的时候利用hash的思想存储一段中每个数出现的次数。然后利用了素数筛法的思想,具体看代码吧。这道题是BC的b题,难度肯定是不大的,因此也不需要下特别多,拿过来瞎搞就可以了。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 1e5+100;bool vis[maxn];int a[maxn], c1[maxn], c2[maxn];bool judge(int k, int n){ memset(c1, 0, sizeof(c1)); memset(c2, 0, sizeof(c2)); for(int i = 1; i <= k; i++) c1[a[i]]++; for(int i = 2; i <= n/k; i++) { int l = (i-1)*k+1; int r = i*k; for(int j = l; j <= r; j++) { c2[a[j]]++; if(c2[a[j]] > c1[a[j]]) return false; } for(int j = l;j <= r; j++) c2[a[j]]--; } return true;}void solve(){ int n; scanf("%d", &n); for(int i = 1; i <= n; i++) scanf("%d", &a[i]); memset(vis, false, sizeof(vis)); for(int i = 1; i <= n; i++){ if(n%i==0 && !vis[i]){ if(judge(i, n)){ for(int j = i; j <= n; j += i) vis[i] = true; } } } int first = 1; for(int i = 1; i <= n; i++) if(vis[i]){ if(first){ printf("%d", i); first = 0; } else printf(" %d", i); } printf("\n");}int main(){ int T; scanf("%d", &T); while(T--){ solve(); } return 0;}
0 0
- 【HDU 5908 Abelian Period】
- HDU 5908 Abelian Period
- HDU 5908 Abelian Period
- 【29.27%】【hdu 5908】Abelian Period
- hdu 5908 Abelian Period (枚举)
- hdu 5908 Abelian Period 模拟
- HDU-5908 Abelian Period(思维)
- HDU-5908 Abelian Period(思维)
- HDU:5908 Abelian Period(水题+技巧)
- hdu 5908 Abelian Period【思维+暴力枚举】
- HDU 5908 Abelian Period 模拟乱搞
- HDU 5908 Abelian Period(暴力)
- hdu 5908 Abelian Period(暴力 + map优化)
- HDU-5908-Abelian Period(暴力)
- HDU 5908 Abelian Period (暴力+map)
- HDU -- 5908 Abelian Period 【思维 + map + 暴力】
- 5908 Abelian Period
- hdoj-【5908 Abelian Period】
- Mongodb启动命令mongod参数说明
- LeetCode 412. Fizz Buzz 题解(C++)
- BZOJ 3631 链剖+差分
- jQuery整体架构源码解析
- 大型网站是怎样解决多用户高并发访问
- HDU 5908 Abelian Period
- 栈的生成,进栈,出栈指令
- Windows环境下编译SOFA源码
- 数据结构与算法之栈的应用“逆波兰表达式法”
- MySQL配置文件详解
- 设计模式--观察者模式
- java.lang.IllegalStateException异常产生的原因及解决办法
- java并发临界资源管理
- JQuery实现的登陆注册页面表单