Codeforces 980D Perfect Groups 计数
原文链接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 计数的更多相关文章
- codeforces 980D Perfect Groups
题意: 有这样一个问题,给出一个数组,把里面的数字分组,使得每一个组里面的数两两相乘都是完全平方数. 问最少可以分成的组数k是多少. 现在一个人有一个数组,他想知道这个数组的连续子数组中,使得上面的问 ...
- CF 980D Perfect Groups(数论)
CF 980D Perfect Groups(数论) 一个数组a的子序列划分仅当这样是合法的:每个划分中的任意两个数乘积是完全平方数.定义a的权值为a的最小子序列划分个数.现在给出一个数组b,问权值为 ...
- Codeforces 980 D. Perfect Groups
\(>Codeforces\space980 D. Perfect Groups<\) 题目大意 : 设 \(F(S)\) 表示在集合\(S\)中把元素划分成若干组,使得每组内元素两两相乘 ...
- Perfect Groups CodeForces - 980D
链接 题目大意: 定义一个问题: 求集合$S$的最小划分数,使得每个划分内任意两个元素积均为完全平方数. 给定$n$元素序列$a$, 对$a$的所有子区间, 求出上述问题的结果, 最后要求输出所有结果 ...
- CodeForces 173E Camping Groups 离线线段树 树状数组
Camping Groups 题目连接: http://codeforces.com/problemset/problem/173/E Description A club wants to take ...
- Codeforces 986D Perfect Encoding FFT 分治 高精度
原文链接https://www.cnblogs.com/zhouzhendong/p/9161557.html 题目传送门 - Codeforces 986D 题意 给定一个数 $n(n\leq 10 ...
- [CodeForces - 919B] Perfect Number
题目链接:http://codeforces.com/problemset/problem/919/B AC代码: #include<cstdio> using namespace std ...
- Codeforces 948D Perfect Security(字典树)
题目链接:Perfect Security 题意:给出N个数代表密码,再给出N个数代表key.现在要将key组排序,使key组和密码组的亦或所形成的组字典序最小. 题解:要使密码组里面每个数都找到能使 ...
- CodeForces 57C Array 组合计数+逆元
题目链接: http://codeforces.com/problemset/problem/57/C 题意: 给你一个数n,表示有n个数的序列,每个数范围为[1,n],叫你求所有非降和非升序列的个数 ...
随机推荐
- python习题实例(上)_update18/07/03
用以记录python学习过程中做过的小习题~ ヾ(◍°∇°◍)ノ゙ 1.生成两个列表,分别存放将100以内的偶数&奇数 odd_number=[] even_number=[] for i i ...
- Java RMI与RPC的区别
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6542811.html 一:RPC 远程过程调用 RPC(Remote Procedure Call Prot ...
- winform里面打开网页(转)
首先,新建一个winform项目,我在想,如果想要实现打开网页功能的话,应该会有一个控件什么之类的吧?查了工具栏,真的有一个名叫 WebBrowser的家伙,应该就是这货没错了.在网上查了它的资料更加 ...
- 通过$broadcast或$emit在子级和父级controller之间进行值传递
通过$broadcast或$emit在controller之间进行值传递,不过这些controller必须是子级或者父级关系, $emit只能向父级parent controller传递事件event ...
- LeetCode(123):买卖股票的最佳时机 III
Hard! 题目描述: 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易. 注意: 你不能同时参与多笔交易(你必 ...
- hdu4612 卡cin e-DCC缩点
/* 给定无向图,求加入一条边后最少剩下多少桥 */ #include<bits/stdc++.h> using namespace std; #define maxn 200005 #d ...
- cf161d 求距离为k的点对(点分治,树形dp)
点分治裸题,但是用树形dp也能做 /* dp[u][k]表示在u下距离k的点数量 */ #include<bits/stdc++.h> using namespace std; ]; ], ...
- Python序列[1,2,3,4,5]
序列是用于存放多个值得连续空间,并按一定顺序排列,每一个值(称为元素)都分配一个数,称为索引或位置.通过该索引可以取出相应的值. 索引 序列中的元素都是有序的.拥有自己编号(从0开始),我们可以通过索 ...
- 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)
一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件. 在Spring Cloud中,有分布式配置中心组件spring cloud confi ...
- STL用法大全
1. 概述 泛型编程思想最早缘于A.Stepanov提出的部分算法可独立于数据结构的论断.20世纪90年代初A.Stepanov和Meng Lee根据泛型编程的理论用C++共同编写了STL.但直 ...