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;
}

最新文章

  1. codevs http://www.codevs.cn/problem/?problemset_id=1 循环、递归、stl复习题
  2. 关于学习Knockoutjs--入门(一)
  3. SQLServer 2008以上误操作数据库恢复方法——日志尾部备份(转)
  4. codeforces D
  5. PAT-乙级-1031. 查验身份证(15)
  6. [学姿势]使用AngularJS+CodeIgniter框架经验谈
  7. dotnet与各种数据库类型对应关系
  8. postgres中的merge join
  9. UESTC_秋实大哥与小朋友 2015 UESTC Training for Data Structures&lt;Problem A&gt;
  10. 开源论坛jforum的集成
  11. 【解题报告】Math
  12. java14周
  13. spark2.1源码分析1:Win10下IDEA源码阅读环境的搭建
  14. linux 下tftpf搭建
  15. 在WPF中调用文件夹浏览/选择对话框
  16. 【leetcode】429. N-ary Tree Level Order Traversal
  17. 【JMeter】【性能测试】服务器性能监控
  18. 32-Python3 MySQL(mysql-connector)
  19. 9i时候的块
  20. Thinking in java note1

热门文章

  1. 树莓派 - 驱动hello
  2. 查看FPM在你的机子上的平均内存占用情况
  3. 模拟Django的admin自定义stark组件
  4. next_permitation
  5. codevs2597 团伙
  6. vimtips阅读记录
  7. POJ 2186 tarjan+缩点 基础题
  8. chdoj38 K-partite Graph(补图)
  9. Spring Cloud(7):Zuul自定义过滤器和接口限流
  10. 计算机常识--win7 删除文件、拒绝訪问等等,所有提示权限不够 解决的方法