题目传送门:https://agc003.contest.atcoder.jp/tasks/agc003_d

题目大意:

给定\(n\)个数\(s_i\),要求从中选出尽可能多的数,满足任意两个数之积都不是完全立方数


对于每个数\(s_i\),有\(s_i=\prod\limits_{i=1}^mp_i^{k_i}\),则我们令\(a_i=\prod\limits_{i=1}^mp_i^{k_i\%3}\),然后我们用\(a_i\)代替\(s_i\)来进行考虑,

对于每个\(a_i\),满足\(a_i×a_j\)为立方数的\(a_j\)只有一种取值,我们可以贪心地选择出现次数较多的那一种

预处理出\(\sqrt[3]{S}\)内的质数,对于每个\(s_i\)可以在\(O(M+\log s_i)\)的时间内求出\(a_i\)

然后对于考虑每个质因子的次数,可以求出\(a_j\)

(其实这题时限够大,可以预处理质数)

/*program from Wolfycz*/
#include<map>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define Fi first
#define Se second
#define inf 0x7f7f7f7f
#define sqr(x) ((x)*(x))
#define cub(x) ((x)*(x)*(x))
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline char gc(){
static char buf[1000000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++;
}
inline int frd(){
int x=0,f=1; char ch=gc();
for (;ch<'0'||ch>'9';ch=gc()) if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=gc()) x=(x<<3)+(x<<1)+ch-'0';
return x*f;
}
inline int read(){
int x=0,f=1; char ch=getchar();
for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<3)+(x<<1)+ch-'0';
return x*f;
}
inline void print(int x){
if (x<0) putchar('-'),x=-x;
if (x>9) print(x/10);
putchar(x%10+'0');
}
const int N=1e5;
ll A[N+10],B[N+10];
map<ll,int>Mp;
int main(){
int n=read();
for (int i=1;i<=n;i++){
ll x,y=1;
scanf("%lld",&x);
for (ll j=2;cub(j)<=x;j++) while (x%cub(j)==0) x/=cub(j);
map<ll,int>::iterator it=Mp.find(x);
if (it==Mp.end()) Mp.insert(map<ll,int>::value_type(x,1));
else it->Se++;
A[i]=x;
for (ll j=2;cub(j)<=x;j++){
if (x%j==0){
y*=(x%sqr(j)==0)?j:sqr(j);
while (x%j==0) x/=j;
}
}
y*=(sqr((ll)sqrt(x))==x)?(ll)sqrt(x):sqr(x);
B[i]=y;
}
int Ans=0;
map<ll,int>::iterator it=Mp.find(1);
if (it!=Mp.end()) Ans++,it->Se=0;
for (int i=1;i<=n;i++){
int res=0;
map<ll,int>::iterator x=Mp.find(A[i]);
map<ll,int>::iterator y=Mp.find(B[i]);
if (x!=Mp.end()) res=max(res,x->Se),x->Se=0;
if (y!=Mp.end()) res=max(res,y->Se),y->Se=0;
Ans+=res;
}
printf("%d\n",Ans);
return 0;
}

AtCoder Grand Contest 003 D - Anticube的更多相关文章

  1. AtCoder Grand Contest 003

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

  2. AtCoder Grand Contest 003 E - Sequential operations on Sequence

    题目传送门:https://agc003.contest.atcoder.jp/tasks/agc003_e 题目大意 一串数,初始为\(1\sim N\),现有\(Q\)个操作,每次操作会把数组长度 ...

  3. AtCoder Grand Contest 003 F - Fraction of Fractal

    题目传送门:https://agc003.contest.atcoder.jp/tasks/agc003_f 题目大意: 给定一个\(H×W\)的黑白网格,保证黑格四连通且至少有一个黑格 定义分形如下 ...

  4. Atcoder Grand Contest 003 F - Fraction of Fractal(矩阵乘法)

    Atcoder 题面传送门 & 洛谷题面传送门 Yet another AGC F,然鹅这次就没能自己想出来了-- 首先需注意到题目中有一个条件叫做"黑格子组成的连通块是四联通的&q ...

  5. [Atcoder Grand Contest 003] Tutorial

    Link: AGC003 传送门 A: 判断如果一个方向有,其相反方向有没有即可 #include <bits/stdc++.h> using namespace std; ]; map& ...

  6. AtCoder Grand Contest 003题解

    传送门 \(A\) 咕咕 const int N=1005; char s[N];int val[N],n; int main(){ scanf("%s",s+1),n=strle ...

  7. AtCoder Grand Contest 012

    AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...

  8. AtCoder Grand Contest 011

    AtCoder Grand Contest 011 upd:这篇咕了好久,前面几题是三周以前写的... AtCoder Grand Contest 011 A - Airport Bus 翻译 有\( ...

  9. AtCoder Grand Contest 031 简要题解

    AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...

随机推荐

  1. Mysql 数据库中间件

    读写分离:简单的说是把对数据库读和写的操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力.主数据库提供写操作,从数据库提供读操作,其实在很多系统中,主要是读的操作.当主数据库 ...

  2. 简单的glib测试(三)

    #include <stdlib.h> #include <stdio.h> #include <string.h> #include <locale.h&g ...

  3. openwrt 实现hotplug-button

    <*> kmod-gpio-button-hotplug................Simple GPIO Button Hotplug driver gpio-button-hotp ...

  4. Robots协议应用与写法研究

  5. install build tools 25.0.2 and sync the project

    install build tools 25.0.2 and sync the project in android studio bundle.gradle,将buildToolsVersion修改 ...

  6. mysql数据库隔离级别及其原理、Spring的7种事物传播行为

    一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节.事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有 ...

  7. (linux)INIT_WORK和INIT_DELAYED_WORK详解

      朋友,你相信,一只蝴蝶在北京拍拍翅膀,将使得纽约几个月后出现比狂风还厉害的龙卷风吗?看过那部经典的影片蝴蝶效应的朋友们一定会说,这不就是蝴蝶效应吗.没错.蝴蝶效应其实是混沌学理论中的一个概念.它是 ...

  8. 多态、抽象类、接口、区别(java基础知识九)

    1.多态的概述以及代码体现 * A:多态概述 * 事物存在的多种形态 * B:多态前提 * a:要有继承关系. * 一个类是父类,一个类是子类 * b:要有方法重写. * c:要有父类引用指向子类对象 ...

  9. CentOS/Ubuntu安装GLIBCXX3.4.21

    经过测试“GLIBCXX3.4.21 not find”这篇博文解决了我的问题. 以下是安装步骤:   一.首先查看当前gcc版本 strings /usr/lib/x86_64_linux-gun/ ...

  10. Javascript对象拷贝(clone)

    Javascript对象拷贝(clone),希望大家给点建议​1. [代码]方法代码 function cp(source, target) {    function isBaseType(v) { ...