AT2004 Anticube
https://www.zybuluo.com/ysner/note/1304774
题面
给定\(n\)个数\(s_i\),要求从中选出最多的数,满足任意两个数之积都不是完全立方数。
- \(n\leq10^5,s_i\leq10^{10}\)
解析
很显然的是,完全平方数的所有质因子指数都是\(3\)的倍数。
考虑质因数分解。
我们可以把每个数质因数分解,所有大于\(3\)的指数模\(3\)不影响答案。
然后维护一下该数在处理后的值\(A\),和对应的能与其凑成完全平方数的值\(B\)。
\(A\)与\(B\)不能共存。
于是我们存一下\(A\)的出现次数,最后对于每个数贪心取\(A\)和\(B\)中出现次数更多的那个即可。
注意取过的数不要再取,\(A=B\)时只能取一个。
好了问题来了,质因数分解的复杂度不太对。
有一个显而易见的结论,\(x\)中大于\(x^{\frac{1}{3}}\)的因子至多只有\(2\)个。
于是复杂度就对了?不虚,时限\(5s\)。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<map>
#define ll long long
#define re register
#define il inline
#define fp(i,a,b) for(re int i=a;i<=b;++i)
#define fq(i,a,b) for(re int i=a;i>=b;--i)
using namespace std;
const int N=1e5+100;
ll n,a[N],pri[N],tot,l[N],r[N],ans;
map<ll,int>num,use;
bool vis[N];
il ll gi()
{
re ll x=0,t=1;
re char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') t=-1,ch=getchar();
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*t;
}
il void Pre(re int n)
{
vis[1]=1;
fp(i,2,n)
{
if(!vis[i]) pri[++tot]=i;
for(re int j=1;j<=tot&&i*pri[j]<=n;++j)
{
vis[i*pri[j]]=1;
if(i%pri[j]==0) break;
}
}
}
il void split(re ll x,re int p)
{
re ll A=1,B=1;
fp(i,1,tot)
{
re int gu=0;
while(x%pri[i]==0)
{
x/=pri[i];++gu;
}
gu%=3;
if(gu==1) B=B*pri[i]*pri[i];
if(gu==2) A=A*pri[i]*pri[i],B=B*pri[i];
if(x<pri[i]) break;
}
if(x>1)
{
re ll t=sqrt(x);
if(t*t==x) A=A*x,B=B*t;
else A=A*x,B=B*x*x;
}
l[p]=A;r[p]=B;
++num[A];
}
int main()
{
Pre(4000);
n=gi();
fp(i,1,n) a[i]=gi(),split(a[i],i);
fp(i,1,n)
if(!use[l[i]])
{
use[l[i]]=use[r[i]]=1;
if(l[i]==r[i]) ++ans;
else ans+=max(num[l[i]],num[r[i]]);
}
printf("%lld\n",ans);
return 0;
}
AT2004 Anticube的更多相关文章
- 【agc003D】Anticube
Portal --> agc003D Description 给你\(n\)个数,要从里面选出最多的数满足这些选出来的数中任意两个数的乘积都不是立方数 Solution (为什么感觉最近这种解法 ...
- Agc003_D AntiCube
传送门 题目大意 给定$N$个数,求一个最大的子集,使得任意两两的乘积不是一个完全立方数. $n\leq 10^5 A_i\leq 10^{10}$ 题解 考虑两两乘积为$x^3$,由于$x^3\le ...
- AtCoder Grand Contest 003 D - Anticube
题目传送门:https://agc003.contest.atcoder.jp/tasks/agc003_d 题目大意: 给定\(n\)个数\(s_i\),要求从中选出尽可能多的数,满足任意两个数之积 ...
- AtCoderAGC003D Anticube
Description: 给定一个序列\(a\),要求选出最多的序列元素并保证两两元素的乘积不为立方数 Solution: 我们考虑哪些因子是有用的,如果一个因子的指数\(>3\),我们可以将他 ...
- Solution -「AGC 003D」「AT 2004」Anticube
\(\mathcal{Description}\) Link. 给定 \(n\) 个数 \(a_i\),要求从中选出最多的数,满足任意两个数之积都不是完全立方数. \(n\le10^5\) ...
- Noip前的大抱佛脚----赛前任务
赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...
- AtCoder Grand Contest 003
AtCoder Grand Contest 003 A - Wanna go back home 翻译 告诉你一个人每天向哪个方向走,你可以自定义他每天走的距离,问它能否在最后一天结束之后回到起点. ...
- RE:从零开始的AGC被虐(到)生活(不能自理)
RE:从零开始的AGC被虐(到)生活(不能自理) 「一直注视着你,似近似远,总是触碰不到.」 --来自风平浪静的明天 AtCoder Grand Contest 001 B: Mysterious L ...
- AtCoder Grand Contest
一句话题解 QwQ主要是因为这篇文章写的有点长……有时候要找某一个题可能不是很好找,所以写了这个东西. 具体的题意.题解和代码可以再往下翻._(:з」∠)_ AGC 001 C:枚举中点/中边. D: ...
随机推荐
- JavaScript中整型数据使用
JavaScript中整型数据使用 制作人:全心全意 JavaScript的数字格式允许精确地表示-900719925474092(-253)和900719925474092(253)之间的所有整数, ...
- 3W法则-学习Docker
一.前言 5W1H法则是在一次面试中学习到的,后来在工作也开始使用这种东西,虽然最后没去那家公司,但是也是学习到了,关注开这些东西以后,也发现了一些简化版的3W法则,最近公司也要搞Doce ...
- python后端开发工程师考证试题
python开发工程师考证试题 问答题链接 python开发工程师考证试题 选择题 题目 关于 Python 程序格式框架的描述,以下选项中错误的是 ( A ) A: Python 语言不采用严格的“ ...
- python标准库笔记
1.python互联网数据处理模块 base64数据编码 二进制数据 encode ASCII字符 ASCll字符 decode 二进制数据 json数据交换格式 轻量的数据交换格式,json暴露的A ...
- thinkphp整合系列之微信公众号支付
<?phperror_reporting(E_ALL);ini_set('display_errors', '1');// 定义时区ini_set('date.timezone','Asia/S ...
- 593. Valid Square
Problem statement: Given the coordinates of four points in 2D space, return whether the four points ...
- 从一个简单的组件化封装写优化DOM操作
/* *缺点 * 1. 还需要我们自己手工维护dom状态,以数据的思想去思考 *2. 数据改变后,还需要我们自己手动改变dom *3. * */ class LikeButton{ construct ...
- 破损的键盘(codevs 4650)
题目描述 Description 有一天,你需要打一份文件,但是你的键盘坏了,上面的"home"键和"end"键会时不时地按下,而你却毫不知情,甚至你都懒得打开 ...
- Spring Boot为我们准备了最佳的数据库连接池方案,只需要在属性文件(例如application.properties)中配置需要的连接池参数即可。
Spring Boot为我们准备了最佳的数据库连接池方案,只需要在属性文件(例如application.properties)中配置需要的连接池参数即可.
- docker: 通过docker方式安装jenkins
1. docker pull jenkins 2. docker run -d -p 49001:8080 -v $PWD/jenkins:/var/jenkins_home:z -t jenkins ...