CF 980D Perfect Groups(数论)

一个数组a的子序列划分仅当这样是合法的:每个划分中的任意两个数乘积是完全平方数。定义a的权值为a的最小子序列划分个数。现在给出一个数组b,问权值为i的b的子串个数。

这题意真不是人类智慧能轻易描述的。据说此题在比赛场上读题30min,做题5min,做完还WA。果然是坑题。

如果有两个数a和b,a和b的乘积是完全平方数,那么如果a有因子x2,那么x2就可以去掉,使a变成a/x^2,结论依然成立。因此我们把所有数的质因子次数mod2,可以发现结论仍然不变。

因此,在一个划分内的数必须完全相同或者有数为零(涉及乘除法一定要考虑零啊啊啊)。n^2dp即可。

#include <cstdio>
#include <algorithm>
using namespace std; const int maxn=5005;
int n, a[maxn], b[maxn], cnt[maxn]; //cnt[i]储存i有几个
int k, ans[maxn], id0; int deal(int x){
int flag;
if (x<0) x=-x, flag=-1; else flag=1;
for (int i=2; i*i<=x; ++i)
while (x%(i*i)==0) x/=i*i;
return x*flag;
} int main(){
scanf("%d", &n); int t; id0=-1;
for (int i=1; i<=n; ++i){
scanf("%d", &t), a[i]=b[i]=deal(t);
if (!a[i]) id0=0;
}
sort(b+1, b+1+n);
if (!id0) id0=lower_bound(b+1, b+1+n, 0)-b;
for (int i=1; i<=n; ++i)
a[i]=lower_bound(b+1, b+1+n, a[i])-b;
for (int i=1; i<=n; ++i){
for (int j=1; j<=n; ++j) cnt[j]=0; k=0; //k:[i,j]不同元素的数目
for (int j=i; j<=n; ++j){
if (a[j]==id0){
if (!k) ++ans[1]; else ++ans[k];
continue;
}
if (!cnt[a[j]]) ++k;
++cnt[a[j]]; ++ans[k];
}
}
for (int i=1; i<=n; ++i) printf("%d ", ans[i]);
return 0;
}

最新文章

  1. MySQL存储过程动态SQL语句的生成
  2. SQL Server 2008通过LinkServer操作ORACLE
  3. MVC中Action的执行过程
  4. Hosting custom WPF calendar control in AX 2012
  5. bind 方法实现
  6. Android4.4 + WebAPI 实现拍照上传
  7. 不要停留在表面,MVC 3 我们要深入一些
  8. linux VM命令下查找
  9. ios swift学习日记1-Swift 初见
  10. J2EE之验证码实现
  11. linux 下 查看是32位还是64位系统 命令
  12. 【LeetCode】数组-2(628)-数组中三个数相乘最大
  13. 在MAC OS X中默认的Web共享目录
  14. request对象的方法及其参数的传递
  15. windows 10 安装TortoiseSVN.msi时报2503的错误
  16. Mac下安装Mongodb
  17. 线程池demo
  18. IIS - 自动申请、部署Let&#39;s Encrypt的免费SSL证书(让网站实现HTTPS协议)
  19. Java NIO Overview
  20. springMVC实现 MultipartFile 多文件上传

热门文章

  1. 分享知识-快乐自己:N及分类(双重循环、递归)实现
  2. java--Hibernate实现分页查询
  3. org.apache.catalina.core.StandardWrapperValve invoke报错
  4. CI中site_url和base_url的区别
  5. TypeError: &#39;str&#39; object is not callable
  6. Gym - 100851G:Generators(人尽皆知但是WA题)
  7. java静态方法(变量)、非静态方法(变量)区别
  8. sessionStorage,localStorage,cookies
  9. Poj 1742 Coins(多重背包)
  10. 二 vue环境搭建