「题解」:x
问题 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的更多相关文章
- 「题解」「美团 CodeM 资格赛」跳格子
目录 「题解」「美团 CodeM 资格赛」跳格子 题目描述 考场思路 思路分析及正解代码 「题解」「美团 CodeM 资格赛」跳格子 今天真的考自闭了... \(T1\) 花了 \(2h\) 都没有搞 ...
- 「题解」「HNOI2013」切糕
文章目录 「题解」「HNOI2013」切糕 题目描述 思路分析及代码 题目分析 题解及代码 「题解」「HNOI2013」切糕 题目描述 点这里 思路分析及代码 题目分析 这道题的题目可以说得上是史上最 ...
- 「题解」JOIOI 王国
「题解」JOIOI 王国 题目描述 考场思考 正解 题目描述 点这里 考场思考 因为时间不太够了,直接一上来就着手暴力.但是本人太菜,居然暴力爆 000 ,然后当场自闭- 一气之下,发现对 60pts ...
- 「题解」:[loj2763][JOI2013]现代豪宅
问题 A: 现代豪宅 时间限制: 1 Sec 内存限制: 256 MB 题面 题目描述 (题目译自 $JOI 2013 Final T3$「現代的な屋敷」) 你在某个很大的豪宅里迷路了.这个豪宅由东 ...
- 「题解」:$Six$
问题 A: Six 时间限制: 1 Sec 内存限制: 512 MB 题面 题面谢绝公开. 题解 来写一篇正经的题解. 每一个数对于答案的贡献与数本身无关,只与它包含了哪几个质因数有关. 所以考虑二 ...
- 「题解」:$Smooth$
问题 A: Smooth 时间限制: 1 Sec 内存限制: 512 MB 题面 题面谢绝公开. 题解 维护一个队列,开15个指针,对应前15个素数. 对于每一次添加数字,暴扫15个指针,将指针对应 ...
- 「题解」:Kill
问题 A: Kill 时间限制: 1 Sec 内存限制: 256 MB 题面 题面谢绝公开. 题解 80%算法 赛时并没有想到正解,而是选择了另一种正确性较对的贪心验证. 对于每一个怪,我们定义它的 ...
- 「题解」:y
问题 B: y 时间限制: 1 Sec 内存限制: 256 MB 题面 题面谢绝公开. 题解 考虑双向搜索. 定义$cal_{i,j,k}$表示当前已经搜索状态中是否存在长度为i,终点为j,搜索过边 ...
- 「题解」:07.16NOIP模拟T1:礼物
问题 A: 礼物 时间限制: 1 Sec 内存限制: 256 MB 题面 题目描述 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生 日礼物. 商店里一共有种礼物.夏川每得到一种礼 ...
随机推荐
- php 学习一 变量的定义
//php有如下几种数据类型 // false true boolean类型 //integer int 整数 //float 浮点数就是小数 //string 字符串 //string null 空 ...
- leetcode-第14周双周赛-1271-十六进制魔术数字
自己的提交: class Solution: def toHexspeak(self, num: str) -> str: num = hex(int(num)) num = str(num)[ ...
- Eclipse中安装插件的方法
eclipse插件的安装方法大体有以下三种: 第一种:直接复制法:假设你的Eclipse的在(C:\eclipse), 解压你下载的 eclipse 插件或者安装eclipse 插件到指定目录AA( ...
- 神建模+dp——cf1236E
首先将两个人的所有可能的操作建立成一个模型:m+2行n列的矩阵 序列A对应图上的格子(i,Ai),第0行作为起点,最后一行作为终点,每个点可以向左下,下,右下走,每种可行的情况对应图上的一条路径 推出 ...
- Delphi 文件操作(路径、目录)
Delphi利用系统环境变量获取常用系统目录 //譬如 %WINDIR% 是表示系统目录的系统变量, 可以这样获取: var s: string; begin s := GetEnvironmentV ...
- postgresql数字类型
postgresql的数据类型很多,也可以使用create type命令创建自定义数据类型,但常用的数据类型是以下三种: l 数字数据类型 l 字符串数据类型 l 日期/时间数据类型 数字数据类 ...
- FastJson乱序问题
1.初始化为有序json对象 JSONObject jsonOrdered= new JSONObject(true); 2.将String对象转换过程中,不要调整顺序 JSONObject json ...
- input框多文件上传
在input标签中加入 multiple 属性,可以在一个输入框中选择多个文件进行上传 <input type="file" name="img" mul ...
- ocaml学习
ocaml与haskell一样,是functional programming的代表. 对于有一定编程经验的人来说,入手一种新语言,最有效的方式就是开发一些实用的utility,因此top-level ...
- JAVA FileUtils(文件读写以及操作工具类)
文件操作常用功能: package com.suning.yypt.business.report; import java.io.*; import java.util.*; @SuppressWa ...