Description:

给定一个序列\(a\),要求选出最多的序列元素并保证两两元素的乘积不为立方数

Solution:

我们考虑哪些因子是有用的,如果一个因子的指数\(>3\),我们可以将他化简为\(\text{%3}\)后的指数,这样不影响他找对应的不能一起选的,那我们先将所有数化简并分类(map一下),找出他们的补数(不能一起选的数),然后贪心的选择最大的,这一步需要质因数分解,但是\(10^{10}\)太大了,其实我们只用分解\(10^{\frac{10}{3}}\),剩下的因子只有几种情况,<1>只剩一个因子,<2>剩下两个因子,可能是完全平方数也可能不是,这些情况我们均可确定简数以及补数。注意:如果一个数与他的补数相等,我们只能选一个
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<map>
using namespace std;
const int MAXX=3000;
const int MAXN=100010;
map<long long ,int >num;
map<long long ,bool >vis;
int prime[MAXN],v[MAXN];
int n,tot,ans;
long long a[MAXN],b[MAXN];
inline void init(){
for(int i=2;i<=MAXX;++i){
if(!v[i]){
prime[++tot]=i;
v[i]=i;
}
for(int j=1;j<=tot;++j){
if(i*prime[j]>MAXX||v[i]<prime[j])break;
v[i*prime[j]]=prime[j];
}
}
}
inline void solve(long long x,int pos){
long long u=1;
long long v=1;
for(int i=1;i<=tot;++i){
if(x%prime[i]==0){
long long cnt=0;
while(x%prime[i]==0){
x/=prime[i];
cnt++;
}
cnt%=3;
if(cnt==1){
u*=prime[i];
v*=prime[i]*prime[i];
}
if(cnt==2){
u*=prime[i]*prime[i];
v*=prime[i];
}
}
if(x==1)break;
}
if(x>1){
long long t=(long long)sqrt(x);
u*=x;
if((t*t)==x)v*=t;
else v*=x*x;
}
a[pos]=u;
b[pos]=v;
num[u]++;
}
int main(){
init();
scanf("%d",&n);
for(int i=1;i<=n;++i)cin>>a[i];
for(int i=1;i<=n;++i)solve(a[i],i);
for(int i=1;i<=n;++i){
if(!vis[a[i]]){
vis[a[i]]=1;
vis[b[i]]=1;
if(a[i]==b[i])ans++;
else ans+=max(num[a[i]],num[b[i]]);
}
}
cout<<ans<<endl;
return 0;
}

AtCoderAGC003D Anticube的更多相关文章

  1. 【agc003D】Anticube

    Portal --> agc003D Description 给你\(n\)个数,要从里面选出最多的数满足这些选出来的数中任意两个数的乘积都不是立方数 Solution (为什么感觉最近这种解法 ...

  2. Agc003_D AntiCube

    传送门 题目大意 给定$N$个数,求一个最大的子集,使得任意两两的乘积不是一个完全立方数. $n\leq 10^5 A_i\leq 10^{10}$ 题解 考虑两两乘积为$x^3$,由于$x^3\le ...

  3. AtCoder Grand Contest 003 D - Anticube

    题目传送门:https://agc003.contest.atcoder.jp/tasks/agc003_d 题目大意: 给定\(n\)个数\(s_i\),要求从中选出尽可能多的数,满足任意两个数之积 ...

  4. AT2004 Anticube

    https://www.zybuluo.com/ysner/note/1304774 题面 给定\(n\)个数\(s_i\),要求从中选出最多的数,满足任意两个数之积都不是完全立方数. \(n\leq ...

  5. Solution -「AGC 003D」「AT 2004」Anticube

    \(\mathcal{Description}\)   Link.   给定 \(n\) 个数 \(a_i\),要求从中选出最多的数,满足任意两个数之积都不是完全立方数.   \(n\le10^5\) ...

  6. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  7. AtCoder Grand Contest 003

    AtCoder Grand Contest 003 A - Wanna go back home 翻译 告诉你一个人每天向哪个方向走,你可以自定义他每天走的距离,问它能否在最后一天结束之后回到起点. ...

  8. RE:从零开始的AGC被虐(到)生活(不能自理)

    RE:从零开始的AGC被虐(到)生活(不能自理) 「一直注视着你,似近似远,总是触碰不到.」 --来自风平浪静的明天 AtCoder Grand Contest 001 B: Mysterious L ...

  9. AtCoder Grand Contest

    一句话题解 QwQ主要是因为这篇文章写的有点长……有时候要找某一个题可能不是很好找,所以写了这个东西. 具体的题意.题解和代码可以再往下翻._(:з」∠)_ AGC 001 C:枚举中点/中边. D: ...

随机推荐

  1. hadoop-09-安装资源上传

    hadoop-09-安装资源上传 在/software/www/html 下面上传 ambari  HDP  HDP-UTILS-1.1.0.21 文件,之后解压:

  2. hdoj-5099-Comparison of Android versions

    Comparison of Android versions Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (J ...

  3. hadoop1.1.0的伪分布搭建步骤

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFuYnVyZW4wMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  4. Dynamics CRM2013 Form利用window.location.reload()进行全局刷新带来的问题及解决的方法

    CRM2013以后.表单的保存后变成了局部刷新而非全局刷新,但非常多情况下我们须要刷新整个页面.通过刷新页面来使脚本运行或者业务规则运行来实现某些业务效果,一般我们会使用window.location ...

  5. SSRS 报表 日期类表达式

    一.如何填写表达式 右键点击单元格-表达式 二.表达式 当月1号 =DateSerial(DatePart("yyyy",Now()), DatePart("m" ...

  6. jquery easyui a标记方法传值问题

    今天开发一个功能,其操作的按钮式是一个点击的a标记,并且是动态生成的,其点击方法需要传参数具体代码如下 {field:'time',title:'日程时间',width:200,align:'cent ...

  7. Nginx的日志备份操作

         正常情况下,我们给一个日志文件做备份.通常会 mv access.log access.log.0313 ,之后创建一个新的 touch access.log  会认为是备份完成了:旧的日志 ...

  8. Git 内部原理 - (3) Git 引用 (4)包文件

    Git 引用 我们可以借助类似于 git log 1a410e 这样的命令来浏览完整的提交历史,但为了能遍历那段历史从而找到所有相关对象,你仍须记住 1a410e 是最后一个提交. 我们需要一个文件来 ...

  9. Java 调用对象方法的执行过程

    弄清调用对象方法的执行过程十分重要.下面是调用过程的详细描述: 1) 编译器查看对象的声明类型和方法名.假设调用x.f(param),且隐式参数x声明为C类的对象.需要注意的是:有可能存在多个名为f, ...

  10. VUE框架学习——脚手架的搭建

    #我的VUE框架学习 题记:初识VUE,觉得VUE十分的不错,故决定去深入的了解学习它,工欲善其事,必先利其器,下面是我搭建vue环境的过程! #一.项目搭建及初始化 1.安装:node.js:去官网 ...