HDU 5908 Abelian Period 可以直接用multiset
http://acm.hdu.edu.cn/showproblem.php?pid=5908
要求把数组分成k组使得每组中的元素出现次数相同
就是分成k个集合,那么直接用multiset判定就可以
有重载相等运算符的
我被坑了的就是,
对于2个元素一个集合的可以,那么,4,6,8这样分集合也是可以的。
这个很容易理解
但是,你也要能平均分才行啊
就是10的2可以,但是4是一定不可以得。不能平均分
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define inf (0x3f3f3f3f) typedef long long int LL;#include <iostream> #include <sstream> #include <vector> #include <set> #include <map> #include <queue> #include <string> const int maxn = 100000 + 20; int a[maxn]; multiset<int>aa; multiset<int>bb; set<int>ans; void work() {aa.clear(); // bb.clear(); ans.clear();int n;scanf("%d", &n);bool flag = true;for (int i = 1; i <= n; ++i) {scanf("%d", &a[i]);if (i >= 2 && a[i] != a[i - 1]) flag = false;}ans.insert(n);if (flag) {for (int i = 1; i <= n / 2; ++i) {if (n % i == 0) {ans.insert(i);}}} else {int begin = 1, end = -1;for (int i = 2; i <= n / 2; ++i) {if (n % i != 0) continue;if (ans.find(i) != ans.end()) continue; // aa.clear();end = i; // cout << begin << " " << end << " " << i << endl;for (int j = begin; j <= end; ++j) {aa.insert(a[j]);}begin = end + 1;flag = true;for (int j = 2 * i; j <= n; j += i) {bb.clear();for (int k = j; k >= j - i + 1; --k) {bb.insert(a[k]);}if (aa != bb) {flag = false;break;}}if (!flag) continue;for (int j = i ; j <= n / 2; j += i) {if (n % j == 0) //10的2不代表10的4 ans.insert(j);}}} // show();set<int> :: iterator it = ans.begin();printf("%d", *it);it++;for (; it != ans.end(); ++it) {printf(" %d", *it);}printf("\n");return; }int main() { #ifdef localfreopen("data.txt","r",stdin); #endifint t;scanf("%d", &t);while(t--) work();return 0; }
View Code
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define inf (0x3f3f3f3f) typedef long long int LL;#include <iostream> #include <sstream> #include <vector> #include <set> #include <map> #include <queue> #include <string> const int maxn = 100000 + 20; int a[maxn]; bool isok[maxn]; int n; int cnt[maxn]; int cmp[maxn]; bool check(int val) {for (int i = 1; i <= val; ++i) {cnt[a[i]] = 0;}for (int i = 1; i <= val; ++i) {cnt[a[i]]++;}for (int i = 2 * val; i <= n; i += val) {for (int j = i; j >= i - val + 1; --j) {cmp[a[j]] = 0;}for (int j = i; j >= i - val + 1; --j) {cmp[a[j]]++;}for (int j = 1; j <= val; ++j) {if (cnt[a[j]] != cmp[a[j]]) return false;}}return true; } void work() {scanf("%d", &n);bool flag = true;memset(isok, 0, sizeof isok);isok[n] = 1;for (int i = 1; i <= n; ++i) {scanf("%d", &a[i]);if (i >= 2 && a[i] != a[i - 1]) flag = false;}if (flag) {for (int i = 1; i <= n / 2; ++i) {if (n % i == 0) {isok[i] = 1;}}} else {for (int i = 2; i <= n / 2; ++i) {if (n % i != 0 || isok[i]) continue;if (check(i)) {for (int j = i; j <= n / 2; ++j) {if (n % j == 0) isok[i] = 1;}}}}flag = 0;for (int i = 1; i <= n; ++i) {if (isok[i]) {if (!flag) {printf("%d", i);flag = 1;} else {printf(" %d", i);}}}printf("\n");return; }int main() { #ifdef localfreopen("data.txt","r",stdin); #endifint t;scanf("%d", &t);while(t--) work();return 0; }
转载于:https://www.cnblogs.com/liuweimingcprogram/p/5926729.html
HDU 5908 Abelian Period 可以直接用multiset相关推荐
- HDU 5908 Abelian Period 暴力
Abelian Period 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5908 Description Let S be a number st ...
- base64 去掉白边_LODOP直接用base64码输出图片
Lodop中的ADD_PRINT_IMAGE,也可以直接输出base64码图片,不用加img标签,如果加了img标签,会被当做超文本对待,受浏览器引擎解析的影响. 什么时候使用base64码直接输出比 ...
- 直接用img 的src属性显示base64转码后的字符串成图片【原】
直接用<img> 的src属性显示base64转码后的字符串成图片 <img src="data:image/gif;base64,base64转码后的字符串" ...
- sketch制作Android动画,如何直接用Sketch制作动画|Sketch插件|
原标题:如何直接用Sketch制作动画|Sketch插件| 本期的sketch插件来为大家讲解如何制作动画,看来看看马克笔设计留学的MUzi老师的教程吧! 安装 1.下载并解压 Anima Tooki ...
- 文件上传 java 完美,vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData())...
vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData()) 地址:https://www.cnblogs.com/muscles ...
- hibernate mysql autocommit_Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?...
求大神讲解下 Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了? public class Main { public static void main(Stri ...
- java指令导出data文件_直接用 java 命令行动态生成jpg文件 (转)
直接用 java 命令行动态生成jpg文件 (转)[@more@] /** * jeruGraphics v 1.0 * * 看到一些动态生成图象的例子都是完成的, * 而且很长,觉得不是无论从实用性 ...
- 在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解
看了很多nginx的配置,好像都忽略了ip直接访问web的问题,不利于SEO优化,所以我们希望可以避免直接用IP访问网站,而是域名访问,具体怎么做呢,看下面. 官方文档中提供的方法: If you d ...
- db_host 直接用ip地址吗_新买的粉扑能直接用吗?使用粉扑要注意什么?
许多女性新买的粉扑都是直接使用的,认为包装好的粉扑很干净.但是,也有网友表示新买的粉扑是不宜直接使用的,因为其中也会有许多细菌.那下面我们就一起来了解一下,新买的粉扑能不能直接用吧! 新买的粉扑能直接 ...
- 微信群聊图灵机器人 复制直接用
from itchat.content import * import requests import json import itchat #最好添加这个 不然会报错 import sy ...
最新文章
- MULLS:一种基于多尺度线性最小二乘的激光SLAM算法
- 2021年, 别再只沉迷于GANs 和 Transformer,GNN爆发已经从CV蔓延到物理化学
- 人工智能下一个前沿:可解释性
- jq步骤条 java_JQuery实现步骤条效果(上一步,下一步)
- ways for partner
- 【语义分割】Fully Attentional Network for Semantic Segmentation
- 使用Hibernate JPA的自定义布尔用户类型
- Vue第二部分(3):路由 VueRouter
- php项目如何导jdbc包,JDBC-idea导入mysql连接java的jar包(mac)的方法
- 如何查找android emulator内核的精确版本
- SAP License:MIRO
- CSS:实现跳动小球蒙版效果
- java编程简单网络_Java网络编程之使用Socket搭建一个简易聊天室
- Web前端面试 面试官常问问题
- 网页外挂技术浅谈(入门篇)
- 阿里八八“好记”测试报告
- Unity_AR制作_80
- 02 Redis6-配置文件
- 关闭电脑时提示有人远程使用计算机,关机时提示有人正在远程使用
- 让“作用域和闭包”说人话
热门文章
- kubernetes Istio是什么
- ajax原生为什么else会执行2次,为什么这里的alert会执行2次?
- 青少年计算机知识,学习计算机程序设计和算法知识对青少年教育有什么帮助?...
- android 编译c代码吗,在Android手机上编译C代码
- hwd分别是长宽高_丰田重磅新RAV4荣放!不仅颜值高了 配置还再升级,仅18万
- php封装app微信支付
- CodeForces - 245H Palindromes区间dp_记忆化搜索
- go lang chrome 爬虫 (MAC 系统)
- ubuntu/centos Server 安装完成后,开启SSH,配置IP地址,DNS
- 【实战】Axis2后台Getshell