hdu 50722014鞍山现场赛C题(容斥原理+同色三角形)
来源:互联网 发布:金域名都小区怎么样 编辑:程序博客网 时间:2024/04/27 14:57
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5072;
题意:找出一个3元集合使集合中的两两互质,或两两不互质。这样的集合的个数。
分析:将每个数都幻化成点,互质的边为1,不互质的边为0,这样只需找到,边同为1或者同为0的三角形有多少个就行。那我们就先把数进行素因子分解,求得所有数的素因子都有多少个。然后再枚举每个数的素因子情况,进行容斥原理求解出来与其互质的数有多少,然后总数就是sum*(n-1-sum)。
然后再累加起来就行。
容斥原理详见:容斥原理;
代码如下:
#include <set>#include <map>#include <stack>#include <queue>#include <math.h>#include <vector>#include <string>#include <utility>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>#include <functional>using namespace std;long long cnt[100005];struct sa{ long long fen[20]; long long k;}p[100500];bool phi[100500];long long a[100005];long long ans;int main(){ for(long long i=0;i<100005;i++) p[i].k=0; memset(phi,0,sizeof(phi)); phi[1]=1; for(long long i=2;i<100005;i++){ if(!phi[i]){ for(long long j=i;j<100005;j+=i){ phi[j]=1; p[j].fen[p[j].k]=i; p[j].k++; } } }//先把所有数进行素因子分解 long long t; scanf("%I64d",&t); while(t--){ long long n; memset(cnt,0,sizeof(cnt)); scanf("%I64d",&n); for(long long i=0;i<n;i++){ scanf("%I64d",&a[i]); for(long long j=1;j<(1<<p[a[i]].k);j++){ long long tmp=1; for(long long k=0;k<p[a[i]].k;k++) if(j&(1<<k))tmp*=p[a[i]].fen[k]; cnt[tmp]++; } }//先处理一下 long long ans=0; for(long long i=0;i<n;i++){ long long sum=0; for(long long j=1;j<(1<<p[a[i]].k);j++){ long long tmp=1; long long flag=0; for(long long k=0;k<p[a[i]].k;k++) if(j&(1<<k)){ tmp*=p[a[i]].fen[k]; flag++; } if(flag&1)sum+=cnt[tmp]; else sum-=cnt[tmp]; }//容斥查找互质的个数 if(sum==0)continue; ans+=(sum-1)*(n-sum); } printf("%I64d\n",n*(n-1)*(n-2)/6-ans/2); } return 0;}
0 0
- hdu 50722014鞍山现场赛C题(容斥原理+同色三角形)
- 2014鞍山现场赛C题HDU5072(素筛+容斥原理)
- 2014 鞍山区域赛 C HDU5072 Coprime 莫比乌斯/容斥+同色三角形
- hdu5072 Coprime 2014鞍山现场赛C题 容斥原理+单色三角
- HDU-5072 Coprime(容斥原理,同色三角形)
- HDU 5072 Hackthon (容斥 同色三角形变形)
- hdu5072 Coprime | 2014鞍山赛区C题 | 容斥原理
- hdu 5078 Osu! (鞍山现场赛I题)
- hdu 5071 Chat (鞍山现场赛B题)
- hdu 5073 Galaxy (鞍山现场赛D题)
- hdu 5074 Hatsune Miku (鞍山现场赛E题)
- hdu 5078 Osu!(鞍山现场赛)
- HDU 5072:同色三角形,容斥原理,预处理的顺序
- 2014 ACM Regional hdu 5072 (同色三角形模型,容斥原理)
- hdu 45092011年大连现场赛I题(容斥原理)
- hdu 5072 Coprime(同色三角形+容斥)
- HDU 5072 Coprime(同色三角形+容斥)
- hdu 5072 Coprime 容斥 同色三角形
- 搜索—Problem_1008-猜数字
- 【HDU 2159】FATE(二维完全背包)
- 老版本的AndroidStudio工程项目如何使用AndroidStudio2.0的Instant Run功能
- hDU Prime Ring Problem
- windows下libcurl的使用
- hdu 50722014鞍山现场赛C题(容斥原理+同色三角形)
- Unity删除工程记录
- JavaScript 对象的构成与创建
- 关于android:sharedUserId="android.uid.system"这个系统级权限
- JPEG 原理详细实例分析及其在嵌入式 Linux 中的应用
- jni使用深入分析
- c#程序设计学习-面向对象编程
- linux 下简单配置tomcat集群
- Swift与OC混合使用