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: ...
随机推荐
- Linux CentOS7.5静默安装Oracle11gR2
网上有很多安装教程,但大多不够完整,参照了一些教程,实测安装成功,整理出来分享给大家! 一.官方最低要求配置 内存:1G(官方最低要求1G) 硬盘:40G(企业版安装所需4.29G和1.7G数据文件) ...
- mysql 创建简单的事件event
创建事件语句: CREATE EVENT `事件名` ON SCHEDULE EVERY 1 DAY --每隔一天 STARTS '2015-10-16 00:00:00' --从这个时间开始 ON ...
- C++ 类 直接定义对象与new对象的区别
new创建类对象与直接定义的区别 new创建对象的特点 new创建类对象需要指针接收,一处初始化,多处使用 new创建类对象使用完需delete销毁 new创建对象直接使用堆空间,而局部不用new定义 ...
- PAT顶级 1002. Business (35)
PAT顶级 1002. Business (35) As the manager of your company, you have to carefully consider, for each p ...
- POJ 3261 字符串上的k次覆盖问题
题目大意: 给定一个数组,求一个最大的长度的子串至少出现过k次 一个子串出现多次,也就是说必然存在2个子串间的前缀长度为所求的值 通过二分答案,通过线性扫一遍,去判断出现次数,也就是说每次遇见一个he ...
- [ C语言版 ] 数独计算器 [ 搜索剪枝法 ]
[原创]转载请注明出处. [浙江大学 程序设计专题] 使用方法:按提示输入方式为9*9的矩阵,0表示未知数. 为解决这一问题,我们也尝试了两种方法,准确的说,是第一种方法太慢了,我们对它进行了优化. ...
- 一起去打CS(codevs 5059)
题目描述 Description 早就和lyk约好了去打cs,一直没找着时间,终于今天我家没人,他家也没人,总算可以出去了.但是偏偏天公不作美,某某人非要留那么多题要做.没办法只能尽快做完然后抓紧时间 ...
- Linux下C编程入门(1)
Linux系统的介绍(以下以Manjaro最新版为例子): 一.系统的安装: 1.可以直接使用U盘做一个live usb的启动盘,在bios中设置从U盘启动即可拥有linux系统,如果是新式bios需 ...
- Remove Duplicates from Sorted Array(参考)
Given a sorted array, remove the duplicates in place such that each element appear only once and ret ...
- Memcached集群之通过Repcached实现主从复制(待实践)
暂时了解有这东西,不搭建了. Mamcached可以通过Repcached实现主从复制.有以下优缺点: 优点: 1.能够实现Cache的冗余功能 2.主从之间可以互相读写(亮点) 参考: http:/ ...