hdu5072 容斥+枚举
这题说的是给了 n 个数字 每个数值大于1 小于100000,n小于100000 ,找出满足下面要求的三人组有多少种 比如abc ( (ab)==(bc)==(ac) ==1 )||( (ab)!=1&&(bc)!=1&&(ac)!=1 )
(()----表示gcd )计算出这样的三元组的个数。
这样考虑 三元组必须满足上面的要求 , 那么我们减去不满足的可能情况 abc 计算与 a互质的个数 和与a不互质的个数 得到了b在内的不可行的方案数,然后这样发现会多算一次 如果abc
(ab)==1 (ac)!=1 在计算c的时候又会计算一次。 然后我们得到了所有的 不肯能方案除以2 得到了不可能的方案数 总方案数减去不可能方案数就得到了(因为数比较小用容斥便可以计算出答案)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include<string.h>
#include <vector>
using namespace std;
typedef pair<int,int> PF;
bool vis[];
int prime[],num;
void pri_p(){
num=;
memset(vis,false,sizeof(vis));
for(long long i=; i<=; ++i)
if(vis[i]==false){
prime[num++]=i;
for(long long j=i*i; j<=; j+=i) vis[j]=true;
}
}
int A[];
int P[];
int sizea[];
int D[];
vector<PF>F[];
void fenjie(int loc,int len){
for(int s=; s<(<<len); ++s){
int ss=,num=;
for(int i=;i<len ;++i){
if(s&(<<i)){
ss*=P[i]; num++;
}
}
F[loc].push_back(make_pair(ss,num));
}
sizea[loc]=F[loc].size();
}
void inti(){
pri_p();
for(int i=; i<=; ++i){
int len=;
int s=i,num=;
while(s>&&prime[num]!=){
if(s%prime[num]==){
P[len++]=prime[num];
while(s>&&s%prime[num]==){
s/=prime[num];
}
}
num++;
}
fenjie(i,len);
}
}
void sum(int loc){
int sz=sizea[loc];
for(int i=; i<sz; ++i){
PF t=F[loc][i];
D[t.first]++;
}
}
int jud(int loc){
int ans=;
for(int i=; i<sizea[loc]; ++i){
PF f=F[loc][i];
if(f.second%==)ans+=D[f.first];
else ans-=D[f.first];
}
return ans;
}
int main()
{
inti();
int cas;
scanf("%d",&cas);
for(int cc=; cc<=cas; ++cc){
long long n;
scanf("%I64d",&n);
memset(D,,sizeof(D));
for(int i=; i<n; ++i){
scanf("%d",&A[i]);
sum(A[i]);
}
long long ans=;
for(int i=; i<n; ++i){
long long S= jud(A[i]);
long long noeven = n-S;
if(S<=||noeven==) continue;
ans = ans+noeven*(S-);
}
printf("%I64d\n",n*(n-)*(n-)/-ans/);
}
return ;
}
hdu5072 容斥+枚举的更多相关文章
- HDU - 1695 GCD (容斥+枚举)
题意:求区间1<=i<=b与区间1<=j<=d之间满足gcd(i,j) = k 的数对 (i,j) 个数.(i,j)与(j,i) 算一个. 分析:gcd(i,j)=k可以转化为 ...
- LOJ #2541. 「PKUWC 2018」猎人杀(容斥 , 期望dp , NTT优化)
题意 LOJ #2541. 「PKUWC 2018」猎人杀 题解 一道及其巧妙的题 , 参考了一下这位大佬的博客 ... 令 \(\displaystyle A = \sum_{i=1}^{n} w_ ...
- Luogu P2595 [ZJOI2009]多米诺骨牌 容斥,枚举,插头dp,轮廓线dp
真的是个好(毒)题(瘤).其中枚举的思想尤其值得借鉴. \(40pts\):插头\(dp\),记录插头的同时记录每一列的连接状况,复杂度\(O(N*M*2^{n + m} )\). \(100pts\ ...
- 1307E - Cow and Treats 二分 枚举边界 容斥
1307E - Cow and Treats 题意 有一排给定口味的草,并且给m头牛,每个牛都只吃一种口味的草,并且要吃给定数量个.现在可以安排牛从两边出发,方向向另一方向进发,每次路过符合他口味的草 ...
- hdu5072(鞍山regional problem C):容斥,同色三角形模型
现场过的第四多的题..当时没什么想法,回来学了下容斥,又听学长讲了一讲,终于把它过了 题目大意:给定n个数,求全部互质或者全部不互质的三元组的个数 先说一下同色三角形模型 n个点 每两个点连一条边(可 ...
- BZOJ1853 Scoi2010 幸运数字 【枚举+容斥】
BZOJ1853 Scoi2010 幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号 ...
- POJ1091跳蚤(容斥 + 唯一分解 + 快速幂)
题意:规定每次跳的单位 a1, a2, a3 …… , an, M,次数可以为b1, b2, b3 …… bn, bn + 1, 正好表示往左,负号表示往右, 求能否调到左边一位,即 a1* b1 ...
- 【BZOJ-4455】小星星 容斥 + 树形DP
4455: [Zjoi2016]小星星 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 204 Solved: 137[Submit][Status] ...
- XTU 1242 Yada Number 容斥
Yada Number Problem Description: Every positive integer can be expressed by multiplication of prime ...
随机推荐
- 破解X-Pack和更新许可证
某一天打开 Kibana 对应的 Monitoring 选项卡的时候,发现提示需要下载新的 license,旧的 license 已经过期了: 退出重新登录 发现禁止登录,提示:Login is di ...
- js中如何删除json对象的某一个选项
我有一个这样一个对象,getData, 但是我不想要每一项的id,那怎么去删除呢(使用delete)? getData.map((item) =>{ delete item["id&q ...
- ceph 存储安装部署
环境准备 1.三台服务器 cephnode01 192.168.254.83 cephnode02 192.168.254.84 cephnode03 192.168.254.85 2.基本环境配置 ...
- synchronized同步方法
“非线程安全”其实会在多个线程对同一个对象中的实例变量进行并发访问的时候产生,产生的后果是脏读,也就是取到的数据是被更改过的.而“线程安全”就是以获得的实例变量的值是经过同步处理的,不会出现脏读的现象 ...
- Struts2中的OGNL详解 《转》
首先了解下OGNL的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的 ...
- COGS 1224. [SHOI2002]百事世界杯之旅(期望概率)
COGS 1224. [SHOI2002]百事世界杯之旅 ★ 输入文件:pepsi.in 输出文件:pepsi.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] ...
- PHP pdf转化为图片(PNG)
/** * 将pdf文件转化为多张png图片 * @param string $pdf pdf所在路径 (/www/pdf/abc.pdf pdf所在的绝对路径) * @param string $p ...
- java 空间四点定位,可跟据已知的四点坐标(x,y,z)及距离计算所在位置坐标
public static void main(String args[]) { try{ float point[]=new float[3]; Location loc = new Locatio ...
- 纯HTML自动刷新页面或重定向(http-equiv属性的refresh)
refresh 属性值 -- 刷新与跳转(重定向)页面 refresh出现在http-equiv属性中,使用content属性表示刷新或跳转的开始时间与跳转的网址 refresh示例一:5秒之后刷 ...
- 【JavaScript算法】---插入排序
一.什么叫做插入排序法 有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法 二.核心 插入排序的基本操作 ...