问题 A: x

时间限制: 1 Sec  内存限制: 256 MB

题面


题面谢绝公开。

题解


赛时想到了正解并且对拍了很久。对拍没挂,但是评测姬表示我w0了……一脸懵逼。

不难证明,如果对于两个数字$i,j$,$gcd_{i,j}>1$的话,那么这两个数字必定分在一组内,否则不满足条件。

因此考虑对每一个数字质因数分解。包含同一质因数的数字不能分在同一集合。

此时只需用并查集维护集合个数。最后统计集合分配即可。

注意:每一个1都可以单独分配在一个集合里使得答案满足条件。因此每一个1都应单独放在一个集合中。特判即可。

另外,直接质因数分解会T掉。事先筛一遍素数即可。(用了最慢的筛法,实测可过)

#include<bits/stdc++.h>
#define int long long
#define rint register int
#define read(A) A=init()
#define mod 1000000007
using namespace std;
inline int init()
{
int a=,b=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')b=-;ch=getchar();}
while(ch>=''&&ch<=''){a=(a<<)+(a<<)+ch-'';ch=getchar();}
return a*b;
}
int ToT,n,a[],sum,prime[],tot;
int cnt,cp[],pc[],fa[];
bool vis[],isnt[];
vector <int> v[];
inline int get_fa(int x){return (fa[x]==x)?x:fa[x]=get_fa(fa[x]);}
inline int gcd(int A,int B){return (B==)?A:gcd(B,A%B);}
inline void I_get()
{
for(rint i=;i<=;++i)
{
if(!isnt[i])
{
prime[++tot]=i;int lin=;
while(lin*i<=)isnt[lin*i]=,lin++;
}
}
}
inline int qpow(int x,int y)
{
int num=;
while(y)
{
if(y&)num=num*x%mod;
x=x*x%mod;y>>=;
}
return num;
}
inline void merge(int x,int y)
{
int fx=get_fa(x);
int fy=get_fa(y);
if(fx!=fy)sum--,fa[fy]=fx;
return ;
}
inline void Devide(int id)
{
int x=a[id];
for(rint i=;prime[i]<=sqrt(x);++i)
{
if(x%prime[i]==)
{
x/=prime[i];while(x%prime[i]==)x/=prime[i];
if(!vis[prime[i]])
{
vis[prime[i]]=;cp[++cnt]=prime[i];pc[prime[i]]=cnt;
v[cnt].clear();
v[cnt].push_back(id);
}
else v[pc[prime[i]]].push_back(id);
}
}
if(x>)
{
if(!vis[x])
{
vis[x]=;cp[++cnt]=x;pc[x]=cnt;
v[cnt].clear();
v[cnt].push_back(id);
}
else v[pc[x]].push_back(id);
}
return ;
}
signed main()
{
read(ToT);I_get();
while(ToT--)
{
read(n);sum=n;
cnt=;
memset(vis,,sizeof(vis));
for(rint i=;i<=n;++i)
{
read(a[i]);fa[i]=i;
if(a[i]!=)Devide(i);
}
for(rint i=;i<=cnt;++i)
{
int lin=v[i][];
for(rint j=;j<v[i].size();++j)
merge(lin,v[i][j]);
}
printf("%lld\n",(qpow(,sum)-+mod)%mod);
continue;
}
}

「题解」:x的更多相关文章

  1. 「题解」「美团 CodeM 资格赛」跳格子

    目录 「题解」「美团 CodeM 资格赛」跳格子 题目描述 考场思路 思路分析及正解代码 「题解」「美团 CodeM 资格赛」跳格子 今天真的考自闭了... \(T1\) 花了 \(2h\) 都没有搞 ...

  2. 「题解」「HNOI2013」切糕

    文章目录 「题解」「HNOI2013」切糕 题目描述 思路分析及代码 题目分析 题解及代码 「题解」「HNOI2013」切糕 题目描述 点这里 思路分析及代码 题目分析 这道题的题目可以说得上是史上最 ...

  3. 「题解」JOIOI 王国

    「题解」JOIOI 王国 题目描述 考场思考 正解 题目描述 点这里 考场思考 因为时间不太够了,直接一上来就着手暴力.但是本人太菜,居然暴力爆 000 ,然后当场自闭- 一气之下,发现对 60pts ...

  4. 「题解」:[loj2763][JOI2013]现代豪宅

    问题 A: 现代豪宅 时间限制: 1 Sec  内存限制: 256 MB 题面 题目描述 (题目译自 $JOI 2013 Final T3$「現代的な屋敷」) 你在某个很大的豪宅里迷路了.这个豪宅由东 ...

  5. 「题解」:$Six$

    问题 A: Six 时间限制: 1 Sec  内存限制: 512 MB 题面 题面谢绝公开. 题解 来写一篇正经的题解. 每一个数对于答案的贡献与数本身无关,只与它包含了哪几个质因数有关. 所以考虑二 ...

  6. 「题解」:$Smooth$

    问题 A: Smooth 时间限制: 1 Sec  内存限制: 512 MB 题面 题面谢绝公开. 题解 维护一个队列,开15个指针,对应前15个素数. 对于每一次添加数字,暴扫15个指针,将指针对应 ...

  7. 「题解」:Kill

    问题 A: Kill 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 80%算法 赛时并没有想到正解,而是选择了另一种正确性较对的贪心验证. 对于每一个怪,我们定义它的 ...

  8. 「题解」:y

    问题 B: y 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 考虑双向搜索. 定义$cal_{i,j,k}$表示当前已经搜索状态中是否存在长度为i,终点为j,搜索过边 ...

  9. 「题解」:07.16NOIP模拟T1:礼物

    问题 A: 礼物 时间限制: 1 Sec  内存限制: 256 MB 题面 题目描述 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生 日礼物. 商店里一共有种礼物.夏川每得到一种礼 ...

随机推荐

  1. DenyHosts 安全限制ssh防暴力破解

    DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP ...

  2. 屏幕尺寸,分辨率,PPI,像素之间的关系

    什么是屏幕尺寸? 华为荣耀7的尺寸是5.2英寸.这个5.2英寸是手机屏幕对角线的长度. 1英寸(inch)=2.54厘米(cm) 什么是分辨率? 华为荣耀7的分辨率是1920PX*1080PX.像素是 ...

  3. Delphi实现提取可执行文件内部所有图标

    本实例实现的功能是能够从用户选择的可执行文件(后缀名为exe)中提取所有图标并且显示在窗体上. 在窗体中添加TImage 组件.TOpenDialog组件和TButton组件,TImage组件充当显示 ...

  4. XSS的原理分析与解剖:第三章(技巧篇)**************未看*****************

    ‍‍0×01 前言: 关于前两节url: 第一章:http://www.freebuf.com/articles/web/40520.html 第二章:http://www.freebuf.com/a ...

  5. (转)浅谈C中的malloc和free

    原帖及讨论:http://bbs.bccn.net/thread-82212-1-1.html 在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数 ...

  6. 二分法查找--Python

    二分查找算法,最常规的应用就是在一个有序数组中找特定的数.一般分为四步走: 1. 判定条件为low小于high,low=0, high=size-1 2. mid=(low+high) / 2 3. ...

  7. myeclipse 启动卡住的解决办法

    myeclipse 启动卡住的解决办法 今天启动myeclipse突然卡住,CPU一直占用,启动任务管理器强制关闭.重启myeclipse,重启电脑都不能够解决. 上网查找,在工程路径(工作空间的路径 ...

  8. python 出现indentationError:expected an indented block!

    出现这个问题,代码一般是没问题的,剩下你要考虑: 1. 缩进对齐是否有问题 2. python脚本的格式是啥,如果你在linux上运行,编码需要是unix;  (大部分情况下,我们是在windows下 ...

  9. 拾遗:Gentoo 使用笔记

    零.使用 Git 源 mkdir /etc/portage/repos.conf cd !$ vi gentoo.conf [DEFAULT] main-repo = gentoo [gentoo] ...

  10. msf反弹shell

    今天回顾了一下msf反弹shell的操作,在这里做一下记录和分享.( ̄︶ ̄)↗ 反弹shell的两种方法 第一种Msfvenom实例: 1.msfconsole #启动msf 2.msfvenom - ...