cf980d Perfect Groups
题意
定义一个串的权值是将其划分成 \(k\) 组,使得每一组在满足“从组里选出一个数,再从组里选出一个数,它们的乘积没有平方因子”这样的前提时的最小的 \(k\)。每组的数不必相邻, 不必连续。
现在给你一串数,问你,权值为 \(1,2,\ldots,n\) 的子串分别有多少个。
解答
显然如果一个数中含有平方因子,抹去平方因子也不会对答案产生影响。
因此对于一个串,抹去平方因子后,有多少种不同的数,权值就是多少。注意要特判 \(0\)。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <map>
using namespace std;
int n, a[5005], cnt, b[5005], ans[5005];
map<int,int> mp;
bool vis[5005];
int f(int x){
if(x>=-1 && x<=1) return x;
int flg=1;
if(x<0){
flg = -1;
x *= -1;
}
for(int i=2; i<=10000; i++){
if(i*i>x) break;
while(x%(i*i)==0)
x /= i * i;
}
return x*flg;
}
int main(){
cin>>n;
for(int i=1; i<=n; i++){
scanf("%d", &a[i]);
a[i] = f(a[i]);
if(!mp[a[i]]){
mp[a[i]] = ++cnt;
b[i] = cnt;
}
else b[i] = mp[a[i]];
}
for(int i=1; i<=n; i++){
cnt = 0;
memset(vis, 0, sizeof(vis));
for(int j=i; j<=n; j++){
if(a[j]==0){
if(!cnt) ans[1]++;
else ans[cnt]++;
}
else{
if(!vis[b[j]]){
vis[b[j]] = true;
cnt++;
}
ans[cnt]++;
}
}
}
for(int i=1; i<=n; i++)
printf("%d ", ans[i]);
return 0;
}
cf980d Perfect Groups的更多相关文章
- Codeforces 980 D. Perfect Groups
\(>Codeforces\space980 D. Perfect Groups<\) 题目大意 : 设 \(F(S)\) 表示在集合\(S\)中把元素划分成若干组,使得每组内元素两两相乘 ...
- CF 980D Perfect Groups(数论)
CF 980D Perfect Groups(数论) 一个数组a的子序列划分仅当这样是合法的:每个划分中的任意两个数乘积是完全平方数.定义a的权值为a的最小子序列划分个数.现在给出一个数组b,问权值为 ...
- Codeforces980 D. Perfect Groups
传送门:>Here< 题目大意:先抛出了一个问题——“已知一个序列,将此序列中的元素划分成几组(不需要连续)使得每一组中的任意两个数的乘积都是完全平方数.特殊的,一个数可以为一组.先要求最 ...
- Codeforces 980D Perfect Groups 计数
原文链接https://www.cnblogs.com/zhouzhendong/p/9074164.html 题目传送门 - Codeforces 980D 题意 $\rm Codeforces$ ...
- codeforces 980D Perfect Groups
题意: 有这样一个问题,给出一个数组,把里面的数字分组,使得每一个组里面的数两两相乘都是完全平方数. 问最少可以分成的组数k是多少. 现在一个人有一个数组,他想知道这个数组的连续子数组中,使得上面的问 ...
- Perfect Groups CodeForces - 980D
链接 题目大意: 定义一个问题: 求集合$S$的最小划分数,使得每个划分内任意两个元素积均为完全平方数. 给定$n$元素序列$a$, 对$a$的所有子区间, 求出上述问题的结果, 最后要求输出所有结果 ...
- cf round480D Perfect Groups
题意:给一个序列,对于每一个连续的区间,区间内的数至少分成几个组,使得每个组内的数任意2个相乘是一个完全平方数(包括0). 输出每个组数的个数. $n \leq 5000 , |a_i| \leq 1 ...
- Understanding Kafka Consumer Groups and Consumer Lag
In this post, we will dive into the consumer side of this application ecosystem, which means looking ...
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
随机推荐
- HDevEngine in .NET Applications MultiThreading
Basics To use HDevEngine in Visual Studio .NET, you must add a reference to the HALCON/.NET assembly ...
- mail客户端POP和IMAP协议
POP-邮局协议 mail客户端如果使用POP协议,那么线上服务器的邮件将会自动下载到客户端. IMAP-因特网消息访问协议 mail客户端如果使用IMAP协议,邮件服务器上的邮件将不会自动下载到客户 ...
- leetcode--5 Longest Palindromic Substring
1. 题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximu ...
- Aizu 2300 Calender Colors(暴力)
状压以后,直接暴力枚举,2^20约等于1e6,而且满足bitcount = m的状态很少. #include<bits/stdc++.h> using namespace std; +; ...
- 分析ELF的加载过程
http://blog.chinaunix.net/uid-72446-id-2060538.html 对于可执行文件来说,段的加载位置是固定的,程序段表中如实反映了段的加载地址.对于共享库来?段的加 ...
- 【BZOJ4571】[SCOI2016] 美味(主席树)
点此看题面 大致题意: 给你一个序列\(a\),然后每次询问\(max_{i=l}^r(a_i+x)\ xor\ b\). 大致思路 首先,我们要知道一个简单的性质:位运算时位与位之间是互不影响的. ...
- python_输入一个数,判断是否是素数
while True: n=int(input('n=')) for i in range(2,n): if n%i==0: print("n is not 素数") break ...
- python3安装pip
wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c ...
- git系列讲解
1.git是什么呢?维基百科给出的定义: git是一个分布式版本控制软件,最初由(Linus Torvalds)创作 什么是版本控制?项目经理与程序员的恩怨情仇企业真实案例:开发了a功能,之后项目所要 ...
- 2017年9月22日作业 c++算术运算符 自增 自减 逻辑运算符 位运算符 条件运算符(三元运算符)
作业1: c++算术运算符试题,分析下面程序的输出结果是什么 //第一个: int x=8999;int value=x*1000/1000; //第二个 int x=8999;int value=x ...