hdu5072(鞍山regional problem C):容斥,同色三角形模型
现场过的第四多的题。。当时没什么想法,回来学了下容斥,又听学长讲了一讲,终于把它过了
题目大意:
给定n个数,求全部互质或者全部不互质的三元组的个数
先说一下同色三角形模型
n个点 每两个点连一条边(可以为红色或者黑色),求形成的三条边颜色相同的三角形的个数
反面考虑这个问题,只需要c(n,3)减去不同色的三角形个数即可
对于每一个点,所形成的不同色三角形即为 红色边的数量*黑色边的数量,所以可以O(n)地算出不同色三角形的个数(注意总数要除以2)
然后用c(n,3)减一下即可
对于这个题,如果把互质看作红色边,不互质看作黑色边,就可以转化为同色三角形问题了
那如何求 互质的个数和不互质的个数呢
我们可以预处理范围内每个数的倍数的数量,然后对每个数分解质因子,最后容斥一下即可
代码:
#include <iostream>
#include <stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<ctype.h>
using namespace std;
#define MAXN 1000
long long n;
int a[];
int prime[];
int num[];
int isnotprime[];
int num_prime=;
int fac[][];
int np[];
long long gcd(long long a,long long b)
{
return b?gcd(b,a%b):a;
}
long long lcm(long long a,long long b)
{
return a/gcd(a,b)*b;
}
void setprime()
{
for(int i = ; i < MAXN ; i ++)
{
if(!isnotprime[i])
prime[num_prime ++]=i;
for(int j=;j<num_prime&&i*prime[j]<MAXN;j++)
{
isnotprime[i * prime[j]] = ;
if(!(i%prime[j] ) )
break;
}
}
return ;
}
void setfac(int x,int pos)
{
np[pos]=;
for(int i=;i<num_prime;i++)
{
if(!(x%prime[i]))
{
fac[pos][np[pos]++]=prime[i];
}
while(!(x%prime[i]))
{
x/=prime[i];
}
}
if(x>)
{
fac[pos][np[pos]++]=x;
}
}
long long iae(int pos)
{
long long res=;
for(int i=;i<(<<np[pos]);i++)
{
long long mut=,tmp=;
for(int j=;j<np[pos];j++)
{
if(i&(<<j))
{
mut*=fac[pos][j];
tmp++;
}
}
if(tmp&)
{
res+=num[mut]-;
}
else
{
res-=num[mut]-;
}
}
return res;
}
void setnum()
{
for(int i=;i<=;i++)
{
for(int j=i+i;j<=;j+=i)
num[i]+=num[j];
}
}
int main()
{
#ifndef ONLINE_JUDGE
//freopen("in.txt","r",stdin);
#endif
int T;
setprime();
scanf("%d",&T);
while(T--)
{
memset(num,,sizeof(num));
scanf("%I64d",&n);
for(int i=;i<n;i++)
{
scanf("%d",a+i);
num[a[i]]++;
setfac(a[i],i);
}
setnum();
long long ans=;
for(int i=;i<n;i++)
{
int tmp=iae(i);
ans+=(n--tmp)*tmp;
}
ans=n*(n-)*(n-)/-ans/;
printf("%I64d\n",ans);
}
return ;
}
hdu5072(鞍山regional problem C):容斥,同色三角形模型的更多相关文章
- Hdu 5072 Coprime(容斥+同色三角形)
原题链接 题意选出三个数,要求两两互质或是两两不互质.求有多少组这样的三个数. 分析 同色三角形n个点 每两个点连一条边(可以为红色或者黑色),求形成的三条边颜色相同的三角形的个数反面考虑这个问题,只 ...
- 2015 asia xian regional F Color (容斥 + 组合数学)
2015 asia xian regional F Color (容斥 + 组合数学) 题目链接http://codeforces.com/gym/100548/attachments Descrip ...
- BZoj 2301 Problem b(容斥定理+莫比乌斯反演)
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Submit: 7732 Solved: 3750 [Submi ...
- 广东工业大学2016校赛决赛-网络赛 1174 Problem F 我是好人4 容斥
Problem F: 我是好人4 Description 众所周知,我是好人!所以不会出太难的题,题意很简单 给你n个数,问你1000000000(含1e9)以内有多少个正整数不是这n个数任意一个的倍 ...
- BZOJ.2301.[HAOI2011]Problem B(莫比乌斯反演 容斥)
[Update] 我好像现在都看不懂我当时在写什么了=-= \(Description\) 求\(\sum_{i=a}^b\sum_{j=c}^d[(i,j)=k]\) \(Solution\) 首先 ...
- hdu5072 容斥+枚举
这题说的是给了 n 个数字 每个数值大于1 小于100000,n小于100000 ,找出满足下面要求的三人组有多少种 比如abc ( (ab)==(bc)==(ac) ==1 )||( (ab)!=1 ...
- BZOJ 2301 Problem b (莫比乌斯反演+容斥)
这道题和 HDU-1695不同的是,a,c不一定是1了.还是莫比乌斯的套路,加上容斥求结果. 设\(F(n,m,k)\)为满足\(gcd(i,j)=k(1\leq i\leq n,1\leq j\le ...
- BZOJ2301:[HAOI2011]Problem b(莫比乌斯反演,容斥)
Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...
- 洛谷 P2522 [HAOI2011]Problem b (莫比乌斯反演+简单容斥)
题目描述 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 输入输出格式 输入格式: 第一行一个整数 ...
随机推荐
- SVN权限修复
Description : Commit failed (details follow): Suggestion : The operation could not be completed. Tec ...
- effective C++: 5实现
五.实现 大多数情况下,适当提出拟的类定义以及函数声明,是花费最多心力的两件事.尽管如此,还是有很多东西需要小心:太快定义变量可能造成效率上的拖延:过度使用转型(casts)可能导致代码变慢又难维护, ...
- HDU 1501 & POJ 2192 Zipper(dp记忆化搜索)
题意:给定三个串,问c串是否能由a,b串任意组合在一起组成,但注意a,b串任意组合需要保证a,b原串的顺序 例如ab,cd可组成acbd,但不能组成adcb. 分析:对字符串上的dp还是不敏感啊,虽然 ...
- SOA——面向服务的体系架构
上一篇博文中提到了"紧耦合"的现象.怎样解决?SOA.採用面向服务的体系架构. 一.What? SOA=Service-oriented Architecture面向服务的体系结构 ...
- 最好的Laravel中文文档
分页 配置 基本用法 给分页链接添加自定义信息 配置 在其它的框架中,分页有时很痛苦. 但是Laravel让分页简单到不可思议. 默认Laravel包含了两个分页视图, 在app/config/vie ...
- C++类的const成员函数、默认的构造函数、复制形参调用函数(转)
C++类的const成员函数 double Sales_item::avg_price() const { } const关键字表明这是一个const成员函数,它不可以修改Sales_item类的成员 ...
- 文件操作2 cp mv rm
1.cp命令 [root@rusky /]# cp 123 /test #在linux系统中,如果文件123已经存在,则提示用户确认,在unix系统中则不提示,除非使用参数-i 交互式操作.cp: ...
- 自定义ViewGroup 流式布局
使用 public class MainActivity extends Activity { @Override protected void onCreate(Bundle sav ...
- Ajax七层模型用途
Ajax七层模型 OSI七层模型满足所有网格模型 1.物理层:符合标准: 2.数据链路层:如网卡.水晶头.连接网络层等: 3.网络层:路由器(数据外围打IP地址): 4.传输层:两台计算器端口的连接: ...
- C++,关于类和结构体中,成员访问属性(public,private)
今天发现一个的问题: #include <vector> #include <iostream> #include <algorithm> #include < ...