原文链接https://www.cnblogs.com/zhouzhendong/p/9074164.html

题目传送门 - Codeforces 980D

题意

  $\rm Codeforces$ 真是个令人伤心的地方。

  伤心的 $zzd$ 现在给你一个含有 $n$ 个数字元素的数列。

  $zzd$ 问你对于 $1$ 到 $n$ 之间的每一个 $k$ 满足 $Q(序列)=k$ 的原序列的连续子序列个数。

  其中,$Q()$定义如下:

  把当前数列中的数分组,使得同组中任意两个数的乘积为完全平方数。其中最小分组数就是 $Q()$ 的值。

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

题解

  伤心的 $zzd$ 再一次来到了令人伤心的 $\rm Codeforces $ ,再一次的看错题意,并再一次的没有考虑到坑点。

  很容易发现对于一个数,它的平方因子对最后的分组没有影响。

  我们把每一个数都除掉其最大平方因子,然后显然只有相同的数能分到同一组。

  于是离散化一下 $O(n^2)$ 统计即可。

  然后!!

  有一个特殊的数字叫做 "0" !

  $0$可以随便分组。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=10005;
int n,a[N],cnt=0;
int pcnt=0,prime[N],f[N];
map <int,int> mp;
int tot,v[N],ans[N];
void get_prime(int n){
for (int i=1;i<=n;i++)
f[i]=1;
f[1]=0;
for (int i=2;i<=n;i++){
if (!f[i])
continue;
prime[++pcnt]=i*i;
for (int j=i*2;j<=n;j+=i)
f[j]=0;
}
}
int main(){
get_prime(10000);
scanf("%d",&n);
mp.clear();
for (int i=1;i<=n;i++){
scanf("%d",&a[i]);
if (a[i]==0)
continue;
for (int j=1;j<=pcnt;j++)
while (a[i]%prime[j]==0)
a[i]/=prime[j];
if (mp[a[i]]==0)
mp[a[i]]=++cnt;
a[i]=mp[a[i]];
}
for (int i=1;i<=n;i++){
memset(v,0,sizeof v);
tot=0;
for (int j=i;j<=n;j++){
if (a[j])
tot+=v[a[j]]==0;
v[a[j]]++;
ans[max(tot,1)]++;
}
}
for (int i=1;i<=n;i++)
printf("%d ",ans[i]);
return 0;
}

  

Codeforces 980D Perfect Groups 计数的更多相关文章

  1. codeforces 980D Perfect Groups

    题意: 有这样一个问题,给出一个数组,把里面的数字分组,使得每一个组里面的数两两相乘都是完全平方数. 问最少可以分成的组数k是多少. 现在一个人有一个数组,他想知道这个数组的连续子数组中,使得上面的问 ...

  2. CF 980D Perfect Groups(数论)

    CF 980D Perfect Groups(数论) 一个数组a的子序列划分仅当这样是合法的:每个划分中的任意两个数乘积是完全平方数.定义a的权值为a的最小子序列划分个数.现在给出一个数组b,问权值为 ...

  3. Codeforces 980 D. Perfect Groups

    \(>Codeforces\space980 D. Perfect Groups<\) 题目大意 : 设 \(F(S)\) 表示在集合\(S\)中把元素划分成若干组,使得每组内元素两两相乘 ...

  4. Perfect Groups CodeForces - 980D

    链接 题目大意: 定义一个问题: 求集合$S$的最小划分数,使得每个划分内任意两个元素积均为完全平方数. 给定$n$元素序列$a$, 对$a$的所有子区间, 求出上述问题的结果, 最后要求输出所有结果 ...

  5. CodeForces 173E Camping Groups 离线线段树 树状数组

    Camping Groups 题目连接: http://codeforces.com/problemset/problem/173/E Description A club wants to take ...

  6. Codeforces 986D Perfect Encoding FFT 分治 高精度

    原文链接https://www.cnblogs.com/zhouzhendong/p/9161557.html 题目传送门 - Codeforces 986D 题意 给定一个数 $n(n\leq 10 ...

  7. [CodeForces - 919B] Perfect Number

    题目链接:http://codeforces.com/problemset/problem/919/B AC代码: #include<cstdio> using namespace std ...

  8. Codeforces 948D Perfect Security(字典树)

    题目链接:Perfect Security 题意:给出N个数代表密码,再给出N个数代表key.现在要将key组排序,使key组和密码组的亦或所形成的组字典序最小. 题解:要使密码组里面每个数都找到能使 ...

  9. CodeForces 57C Array 组合计数+逆元

    题目链接: http://codeforces.com/problemset/problem/57/C 题意: 给你一个数n,表示有n个数的序列,每个数范围为[1,n],叫你求所有非降和非升序列的个数 ...

随机推荐

  1. Django 配置(一)开启服务

    注:这里使用的是命令行创建,当然也可以用 pycharm 自带的 django 项目创建更加简便. 安装django pip install django 创建项目 django-admin star ...

  2. Linux IO实时监控iostat命令

    简介 iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息.用户可以通过指定统计的次数和时间 ...

  3. 23)django-缓存

    一:目录 1)简介 2)django缓存方式 3)django应用方式 二:简介 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显, 最简单解决方 ...

  4. Win10 SQL Server 2017安装教程

    Win10 SQL Server 2017安装教程 1:下载地址 2:开始安装 1:安装环境预备说明 还要注意就是要先下载这个VC++的更新,可以解决服务器安装不上的问题,下载链接 :Microsof ...

  5. 使用gulp-babel转换Es6出现exports is not defined 问题

    //问题描述:当使用import导入模块时,出现exports is not defined //1.安装插件 npm install --save-dev babel-plugin-transfor ...

  6. 在前台根据传过来的XX级别的数字转XX的名字

    需求描述:进入页面,展示列表,列表中有个XX级别的项,数据库中的级别使用1234来存放的,现在要转成对应的一级XX,二级XX,三级XX,四级XX. 吐槽一下:正常的做法应该是在后台,就把查出来的级别1 ...

  7. laravel 频率限制throttle

    在 Laravel 5.6 中,还引入了频率限制功能.所谓频率限制,指的是在指定时间单个用户对某个路由的访问次数限制,该功能有两个使用场景,一个是在某些需要验证/认证的页面限制用户失败尝试次数,提高系 ...

  8. Brup Suite 渗透测试笔记(七)

    继续接上次笔记: 1.Burp Intruder的payload类型的子模块(Character blocks)使用一种给出的输入字符,根据指定的设置产生指定大小的字符块,表现形式为生成指定长度的字符 ...

  9. WBXML 1.3协议摘要

    协议地址:WAP195   网络字节顺序:big-endian.   为什么要加0x40? 参考:Compressing XML When an element contains content (t ...

  10. 史上最简单的 SpringCloud 教程

    史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)史上最简单的Spri ...