CF980D Perfect Groups

题意:

将一个串划分为多个子集(不要求连续),要求同一子集内两任意元素的积为平方数

定义一个串的答案为所需的最少子集个数

一个长度为 n 的串有 n(n+1)2\frac{n(n+1)}{2}2n(n+1)​个非空子串,求答案为 1,2,3,⋯,n1,2,3,\cdots ,n1,2,3,⋯,n 的非空子串个数

题解:

这个不应该是紫题。。
先给结论:
如果a,b,c∈N+a,b,c∈N^+a,b,c∈N+,ab=n2ab=n^2ab=n2,bc=m2bc=m^2bc=m2,那么有ac=k2ac=k^2ac=k2。n,m,k∈N+n,m,k∈N^+n,m,k∈N+
你可以理解成有传递性
证明可以用唯一分解定理:

那么说明我们可以将这些平方数用并查集维护在一个集合里,然后n2n^2n2枚举所有子串暴力统计

代码:

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define int long long
int n,x[5001],fa[5001],ans[5001],num[5001];
int find(int x)
{if(fa[x]==x)return x;return fa[x]=find(fa[x]);
}
void merge(int x,int y)
{fa[find(x)]=find(y);
}
signed main()
{scanf("%lld",&n);for(int i=1;i<=n;i++){scanf("%lld",&x[i]);fa[i]=i;}for(int i=1;i<=n;i++)for(int j=1;j<i;j++)if(x[i]*x[j]>0){int tmp=(int)sqrt(x[i]*x[j]);if(tmp*tmp==x[i]*x[j])merge(i,j);}for(int i=1;i<=n;i++){int tot=0;memset(num,0,sizeof(num));for(int j=i;j<=n;j++)if(x[j]==0)ans[max(1ll,tot)]++;else{if(!num[find(j)]){num[find(j)]=1;tot++;}ans[tot]++;}}for(int i=1;i<=n;i++)printf("%lld ",ans[i]);
}

CF980D Perfect Groups相关推荐

  1. cf round480D Perfect Groups

    题意:给一个序列,对于每一个连续的区间,区间内的数至少分成几个组,使得每个组内的数任意2个相乘是一个完全平方数(包括0). 输出每个组数的个数. $n \leq 5000 , |a_i| \leq 1 ...

  2. python的json格式输出_python中json格式数据输出实现方式

    python中json格式数据输出实现方式 主要使用json模块,直接导入import json即可. 小例子如下: #coding=UTF-8 import json info={} info[&q ...

  3. 卷积Groups Group Convolutions

    Symmetry Consider a square. Is it symmetric? How is it symmetric? How much symmetry does it have? Wh ...

  4. 367. Valid Perfect Square

    题目: Given a positive integer num, write a function which returns True if num is a perfect square els ...

  5. a prefect storm歌词_Storm s Perfect Storm歌词

    Storm s Perfect Storm歌词 添加日期:2003-05-05 时长:02分18秒 歌手:X Men Artist: Sara Evans Album: Sara Evans : Re ...

  6. limit_choices_to a value on a field in the same model - Google Groups

    limit_choices_to a value on a field in the same model - Google Groups: "" (Via.) 转载于:https ...

  7. Java was not the perfect solution for every pro...

    为什么80%的码农都做不了架构师?>>> When I started writing From Java to Ruby, I had a good idea that Java ...

  8. R语言使用dplyr聚合统计分组数据、ggplot2可视化分组线图、使用geom_line函数自定义设置线条类型、粗细、颜色(Change line types + colors by groups)

    R语言ggplot2可视化分组线图.使用geom_line函数自定义设置线条类型.宽度(粗细.).颜色(Change line types by groups.Change line types + ...

  9. Two Straws May Make a Perfect Diamond: Selecting Individually Weak Features for a Better Accuracy

    Two Straws May Make a Perfect Diamond: Selecting Individually Weak Features for a Better Accuracy 摘要 ...

最新文章

  1. JQUERY搞的相册导航DEMO教学,总有一款合心意
  2. MIT副教授赵宇飞团队登数学四大顶刊,华人作者中两位是本科生,最小的是00后...
  3. react生命周期和组件生命周期
  4. Spring+hibernate里使用jdbc connection
  5. 系统练级攻略 | 京东架构师倾情解读
  6. 学习 WCF (1)--基础篇
  7. Oracle存储过程 使用游标、数组的配合查询
  8. MYSQL jdbc autoReconnect
  9. 20个软件开发常用设计文档大全下载
  10. Vs2010架构设计-层图(Layer Diagram)
  11. Django主从数据库分离配置
  12. 「leetcode」本周小结!(回溯算法系列二)
  13. Centos 6 之samba 搭建
  14. 红旗服务器安装Tuxedo中间件
  15. Android模拟器 使用 Fiddler抓包
  16. 后渗透攻击阶段 PTES
  17. 地铁一公里造价达7亿元,大部分城市无法回本,为何还抢着建?
  18. 微信公众号开发:Java后台如何处理公众号关注和取关事件
  19. 2021-06-08STC15F2K602S串口2驱动代码
  20. java excel 边框颜色_poi生成excel整理(设置边框/字体/颜色/加粗/居中/)

热门文章

  1. 不当败家子的原因......
  2. 22岁少年破解史上最严重网络攻击,拯救全球互联网,三个月后却被FBI逮捕
  3. 如何用数学方法估算一个女生前男友的数量?
  4. 我怀疑全国最会吹牛的人,都在这8个公众号上了
  5. 那些把天聊死的神操作。。| 今日最佳
  6. 我国最新十大黑科技发布,颠覆你的想象!
  7. 预售┃没有标题,配得上这款“俄罗斯方块”
  8. 从串行线程封闭到对象池、线程池
  9. 腐蚀rust服务器命令_RUST++ MOD
  10. linux目录结果说明,Linux目录结构及文件说明