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相关推荐

  1. HDU 5908 Abelian Period 暴力

    Abelian Period 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5908 Description Let S be a number st ...

  2. base64 去掉白边_LODOP直接用base64码输出图片

    Lodop中的ADD_PRINT_IMAGE,也可以直接输出base64码图片,不用加img标签,如果加了img标签,会被当做超文本对待,受浏览器引擎解析的影响. 什么时候使用base64码直接输出比 ...

  3. 直接用img 的src属性显示base64转码后的字符串成图片【原】

    直接用<img> 的src属性显示base64转码后的字符串成图片 <img src="data:image/gif;base64,base64转码后的字符串" ...

  4. sketch制作Android动画,如何直接用Sketch制作动画|Sketch插件|

    原标题:如何直接用Sketch制作动画|Sketch插件| 本期的sketch插件来为大家讲解如何制作动画,看来看看马克笔设计留学的MUzi老师的教程吧! 安装 1.下载并解压 Anima Tooki ...

  5. 文件上传 java 完美,vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData())...

    vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData()) 地址:https://www.cnblogs.com/muscles ...

  6. hibernate mysql autocommit_Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?...

    求大神讲解下 Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了? public class Main { public static void main(Stri ...

  7. java指令导出data文件_直接用 java 命令行动态生成jpg文件 (转)

    直接用 java 命令行动态生成jpg文件 (转)[@more@] /** * jeruGraphics v 1.0 * * 看到一些动态生成图象的例子都是完成的, * 而且很长,觉得不是无论从实用性 ...

  8. 在nginx中配置如何防止直接用ip访问服务器web server及server_name特性讲解

    看了很多nginx的配置,好像都忽略了ip直接访问web的问题,不利于SEO优化,所以我们希望可以避免直接用IP访问网站,而是域名访问,具体怎么做呢,看下面. 官方文档中提供的方法: If you d ...

  9. db_host 直接用ip地址吗_新买的粉扑能直接用吗?使用粉扑要注意什么?

    许多女性新买的粉扑都是直接使用的,认为包装好的粉扑很干净.但是,也有网友表示新买的粉扑是不宜直接使用的,因为其中也会有许多细菌.那下面我们就一起来了解一下,新买的粉扑能不能直接用吧! 新买的粉扑能直接 ...

  10. 微信群聊图灵机器人 复制直接用

    ​​​​​ from itchat.content import * import requests import json import itchat #最好添加这个 不然会报错 import sy ...

最新文章

  1. MULLS:一种基于多尺度线性最小二乘的激光SLAM算法
  2. 2021年, 别再只沉迷于GANs 和 Transformer,GNN爆发已经从CV蔓延到物理化学
  3. 人工智能下一个前沿:可解释性
  4. jq步骤条 java_JQuery实现步骤条效果(上一步,下一步)
  5. ways for partner
  6. 【语义分割】Fully Attentional Network for Semantic Segmentation
  7. 使用Hibernate JPA的自定义布尔用户类型
  8. Vue第二部分(3):路由 VueRouter
  9. php项目如何导jdbc包,JDBC-idea导入mysql连接java的jar包(mac)的方法
  10. 如何查找android emulator内核的精确版本
  11. SAP License:MIRO
  12. CSS:实现跳动小球蒙版效果
  13. java编程简单网络_Java网络编程之使用Socket搭建一个简易聊天室
  14. Web前端面试 面试官常问问题
  15. 网页外挂技术浅谈(入门篇)
  16. 阿里八八“好记”测试报告
  17. Unity_AR制作_80
  18. 02 Redis6-配置文件
  19. 关闭电脑时提示有人远程使用计算机,关机时提示有人正在远程使用
  20. 让“作用域和闭包”说人话

热门文章

  1. kubernetes Istio是什么
  2. ajax原生为什么else会执行2次,为什么这里的alert会执行2次?
  3. 青少年计算机知识,学习计算机程序设计和算法知识对青少年教育有什么帮助?...
  4. android 编译c代码吗,在Android手机上编译C代码
  5. hwd分别是长宽高_丰田重磅新RAV4荣放!不仅颜值高了 配置还再升级,仅18万
  6. php封装app微信支付
  7. CodeForces - 245H Palindromes区间dp_记忆化搜索
  8. go lang chrome 爬虫 (MAC 系统)
  9. ubuntu/centos Server 安装完成后,开启SSH,配置IP地址,DNS
  10. 【实战】Axis2后台Getshell