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

$n \leq 5000 , |a_i| \leq 10^8$

我们发现,对于一个数$x$,我们把$x$所有成对的相同质因子除去之后得到的数是$f(x)$

那么分到同一个组的所有数的$f(x_i)$相同,0可以被分到任何集合

明显我们可以$n^2$做这道题,枚举一个子序列的右端点,然后从右到左枚举左端点,顺便维护最小组数。

对于加入一个数$x$,我们需要知道当前区间里面的数是否有和$x$相同的,如果有相同的,就加入那个集合,否则就新开一个集合

所以对于每一个点,我们预处理下一个和它相同的数的位置

当然0的情况不同,随便加到任意一个集合就可以了

//Serene
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<set>
using namespace std;
#define ll long long
#define db double
#define For(i,a,b) for(int i=(a);i<=(b);++i)
#define Rep(i,a,b) for(int i=(a);i>=(b);--i)
const int maxn=5000+7,M=120;
ll n,a[maxn],nxt[maxn],ans[maxn];
set<ll> prime;
set<ll>::iterator it;char cc;ll ff;
template<typename T>void read(T& aa) {aa=0;ff=1; cc=getchar();while(cc!='-'&&(cc<'0'||cc>'9')) cc=getchar();if(cc=='-') ff=-1,cc=getchar();while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();aa*=ff;
}ll qp(ll x,ll k,ll mod) {ll rs=1;while(k) {if(k&1) rs=rs*x%mod;k>>=1; x=x*x%mod;}return rs;
}ll gcd(ll x,ll y) {return y==0? x:gcd(y,x%y);}bool isprime(ll n) {if(n==2||n==3||n==5||n==7) return 1;if(n<2||(n%6!=1&&n%6!=5)) return 0;ll m=n-1,t=0,x,y;while((m&1)==0) t++,m>>=1;For(qaq,1,20) {x=rand()%(n-2)+2;x=qp(x,m,n);For(i,1,t) {y=x*x%n;if(y==1&&x!=1&&x!=n-1) return 0;x=y;}if(x!=1) return 0;}return 1;
}ll prho(ll n,ll m) {ll x=rand()%(n-1)+1,y=0;for(ll i=1,k=1,d;y!=x;++i) {if(i==k) {y=x;k<<=1;}x=(x*x+m)%n;d=gcd((y-x+n)%n,n);if(d>1&&d<n) return d;}return n;
}void find(ll n,ll m) {if(isprime(n)) {it=prime.find(n);if(it==prime.end()) prime.insert(n);else prime.erase(it);return;}ll p=n; while(p>=n) p=prho(n,m--);find(p,M); find(n/p,M);
}ll get_num(ll n) {
//  cerr<<"get_num("<<n<<")\n";if(n==1||n==0) return n;find(n,M);ll rs=1;while(!prime.empty()) {it=prime.begin();rs*=*it;prime.erase(it);}return rs;
}int main() {read(n); ll x;For(i,1,n) {
//      cerr<<"get a["<<i<<"]:";read(x);a[i]=get_num(abs(x));if(x<0) a[i]=-a[i];}For(i,1,n) {nxt[i]=n+1;For(j,i+1,n) if(a[j]==a[i]) {nxt[i]=j;break;}}int now;For(i,1,n) {now=0;Rep(j,i,1) {if(a[j]&&nxt[j]>i) ++now;++ans[now];}}ans[1]+=ans[0];For(i,1,n) printf("%lld ",ans[i]);printf("\n");return 0;
}

  

转载于:https://www.cnblogs.com/Serene-shixinyi/p/9095228.html

cf round480D Perfect Groups相关推荐

  1. CF980D Perfect Groups

    CF980D Perfect Groups 题意: 将一个串划分为多个子集(不要求连续),要求同一子集内两任意元素的积为平方数 定义一个串的答案为所需的最少子集个数 一个长度为 n 的串有 n(n+1 ...

  2. cf 923C Perfect Security

    一 原题 C. Perfect Security time limit per test 3.5 seconds memory limit per test 512 megabytes input s ...

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

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

  4. 卷积Groups Group Convolutions

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

  5. heartbeat: ha.cf配置文件中文详解

    ha.cf文件设置了heartbeat的检验机制,没有执行机制.Haresources用来设置当主服务器出现问题时heartbeat的执行机制.其内容为:当主服务器宕机后,该怎样进行切换操作.切换内容 ...

  6. 论文中出现的 cf. i.e. s.t. e.g. w.r.t. et al. etc等英文缩写是什么意思

    论文阅读中经常遇到的一些缩写.简拼,具体含义 cf.      参考 例句:The prefix B denotes that the corresponding quantity is expres ...

  7. Linux--解决上cf慢的问题(通过修改hosts)

    2014-12-26 23:23:56 思路:上cf慢由来已久,今看到神博客一篇:http://www.cnblogs.com/Howe-Young/p/4101047.html 完美地解决了这个问题 ...

  8. cf #796 Div.2

    cf #796 Div.2 文章目录 cf #796 Div.2 [A. Cirno's Perfect Bitmasks Classroom](https://codeforces.com/cont ...

  9. heartbeat: ha.cf配置文件(转载,感谢原创)

    ha.cf文件设置了heartbeat的检验机制,没有执行机制.Haresources用来设置当主服务器出现问题时heartbeat的执行机制.其内容为:当主服务器宕机后,该怎样进行切换操作.切换内容 ...

最新文章

  1. linux apt-get 源,Ubuntu应用之——apt-get更改源地址
  2. Smarty中的ob_start问题
  3. 深入理解alias, alias_method和alias_method_chain
  4. 基于docker 如何部署surging分布式微服务引擎
  5. 《netty入门与实战》笔记-02:服务端启动流程
  6. android 小米截图,小米工程师晒基于Android Q定制的MIUI截图
  7. python怎么查询帮助信息_Python 查看模块的帮助文档,方法和帮助信息
  8. 打开JMeter报错:Could not reserve enough space for 1048576KB object heap
  9. 2023北京邮电大学计算机考研信息汇总
  10. css超链接样式+雪碧图实现导航
  11. 虚拟机中安装配置Windows server 2003和iis6
  12. Android初学者的疑惑与“死板”的Android初学之路
  13. HiveQL整理总结
  14. day20遍历数组指定输出的数组
  15. 自然语言处理(NLP)入门(二)
  16. 你了解PMP考试新考纲的内容吗?
  17. 创业早期,如何高效“找钱”?
  18. 业界 | 涂子沛:从幼稚到成熟,我们这个时代的数据革命
  19. Mac 安装 node.js 并进行配置
  20. QQ用户信息管理系统

热门文章

  1. 调起引用市场,引导用户进行评分
  2. DOM基础、定时器、BOM基础
  3. 使用ffmpeg来探测GB28181的ps流
  4. 遇到一个把.o文件strip后出现的奇怪问题
  5. 【Kafka】Kafka 镜像 Kafka mirroring (MirrorMaker)
  6. 【linux】为什么 mmap 比系统调用快
  7. 【elasticsearch】ES 相似文章检测
  8. 【es】使用ElasticSearch的44条建议 性能优化
  9. 【SpringCloud】Ribbon 负载均衡
  10. 【Java】Java 反射 object is not an instance of declaring class