Sky Code poj-3904

    题目大意:给你n个数,问能选出多少满足题意的组数。

    注释:如果一个组数满足题意当且仅当这个组中有且只有4个数,且这4个数的最大公约数是1,$1\le n\le 10^4$。

      想法:我们显然可以知道4个数是可以不用两两互质的,所以正面计算难度较大,我们考虑从反面考虑。我们通过计算所有gcd不为1的组数,用总组数相减即可。然后,我们发现一个不为0的gcd显然可以被组中的任意一个数整除,所以我们可以进行容斥。只需要枚举gcd的约数个即可。计算的过程我们用状态压缩实现。

    最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 10005
using namespace std;
typedef long long ll;
ll a[10010];//记录单个数的质因数
ll cnt;//记录单个数的质因数个数
ll ans[10010][2];//ans[i][0]表示包含i这个因子的数的个数,ans[i][1]表示i的质因子个数
ll Calc(ll x)//计算C[n][4]
{
return x*(x-1)*(x-2)*(x-3)/24;
}
void separate(ll x)//分解质因数,由于我们在后面需要用cnt进行状态压缩,所以a数组从0开始记录
{
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
{
a[cnt]=i;
cnt++;
while(x%i==0)
{
x/=i;
}
}
}
if(x>1) a[cnt++]=x;
}
void dispose(ll x)
{
cnt=0;
separate(x);
for(int i=1;i<(1<<cnt);i++)//通过枚举当前全集来统计桶
{
ll flag=0,middle=1;
for(int j=0;j<cnt;j++)
{
if(i&(1<<j))
{
flag++;
middle*=a[j];
}
}
ans[middle][0]++;
ans[middle][1]=flag;
}
}
int main()
{
ll n;
while(~scanf("%lld",&n))
{
memset(ans,0,sizeof ans);
ll x;
for(int i=1;i<=n;i++)
{
scanf("%lld",&x);
dispose(x);
}
ll answer=Calc(n);
for(int i=2;i<=maxn/4;i++)
{
if(ans[i][0])//Important
{
if(1&ans[i][1]) answer-=Calc(ans[i][0]);//如果是偶数个质因子
else answer+=Calc(ans[i][0]);//如果是奇数个质因子
}
}
// puts("Fuck");
printf("%lld\n",answer);//输出答案即可
}
return 0;
}

    小结:如果一个问题极其复杂,我们不妨反其道而行之。容斥原理就是一例。

[poj3904]Sky Code_状态压缩_容斥原理的更多相关文章

  1. 洛谷 P1763 状态压缩dp+容斥原理

    (题目来自洛谷oj) 一天,maze决定对自己的一块n*m的土地进行修建.他希望这块土地共n*m个格子的高度分别是1,2,3,...,n*m-1,n*m.maze又希望能将这一些格子中的某一些拿来建蓄 ...

  2. HDU 5768 Lucky7 (容斥原理 + 中国剩余定理 + 状态压缩 + 带膜乘法)

    题意:……应该不用我说了,看起来就很容斥原理,很中国剩余定理…… 方法:因为题目中的n最大是15,使用状态压缩可以将所有的组合都举出来,然后再拆开成数组,进行中国剩余定理的运算,中国剩余定理能够求出同 ...

  3. BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划

    BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被 ...

  4. 【arc093f】Dark Horse(容斥原理,动态规划,状态压缩)

    [arc093f]Dark Horse(容斥原理,动态规划,状态压缩) 题面 atcoder 有 \(2^n\) 名选手,编号为 \(1\) 至 \(2^n\) .现在这 \(2^n\) 名选手将进行 ...

  5. [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩)

    [BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u ...

  6. 容斥原理——状态压缩zoj3233 zoj2836升级版

    zoj2836就是裸的求lcm进行容斥,用dfs比较直观 zoj3233增加了一个集合b,lcm(b)的倍数是不符合条件的 那么在zoj2836的基础上,把lcm(x,lcm(b))造成的影响减去即可 ...

  7. HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)

    题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...

  8. 【宽度优先搜索】神奇的状态压缩 CodeVs1004四子连棋

    一.写在前面 其实这是一道大水题,而且还出在了数据最水的OJ上,所以实际上这题并没有什么难度.博主写这篇blog主要是想写下一个想法--状态压缩.状态压缩在记录.修改状态以及判重去重等方面有着极高的( ...

  9. [ACM_动态规划] 轮廓线动态规划——铺放骨牌(状态压缩1)

    Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, af ...

随机推荐

  1. javascript学习笔记 --event事件

    事件源(按钮.窗口)->事件对象->事件处理程序 事件源可以是网页元素浏览器窗口事件处理程序一般是一个函数.       一个事件可以被多个函数处理       事件的总类       鼠 ...

  2. 利用Eclipse中的Maven构建Web项目报错(一)

    利用Eclipse中的Maven构建Web项目 1.在进行上述操作时,pom.xml一直报错 <project xmlns="http://maven.apache.org/POM/4 ...

  3. linux中mysql命令方式备份数据的问题

    这几天公司新出了个组件化的项目,里面需要用到mysql数据库相关的技术,由于之前一直用的mongodb,所以mysql几乎忘光了,于是只能在linux虚拟机中重新开始学习. 基本的增删改查还好,但是在 ...

  4. 创建数据库表默认字段封装SQL

    declare @Table_Name varchar(500) declare @strSQL varchar(500) set @Table_Name='UserInfo' --在此处设置要创建的 ...

  5. javaWeb之邮箱发送(邮箱客户端配置)

    这里使用的是本机的邮箱服务器  , 代码执行条件: 1.·邮箱服务器  , 下载地址   密码   s4xn 邮箱服务器配置: 1):安装 2):打开服务器 红色部分是默认账号,不用处理 3)系统设置 ...

  6. 由会话信息保存认识ThreadLocal

    这次想总结ThreadLocal这个东西,也是由于项目中使用到了它去帮助保存会话信息.传统的(或者说我在学校的时候)方法,大多是用服务端的session保存会话,与浏览器端的cookie协作去追踪这个 ...

  7. 【编程笔记】Unity3D语言的类型系统--C#的类型系统

    几乎所有的编程语言都有自己的类型系统. 而编程语言更是常常按照其类型系统而被分为强类型语言/弱类型语言.安全类型语言/不安全类型语言.静态类型语言/动态类型语言等. 而C#的类型系统是静态.安全,并且 ...

  8. iOS逆向工程,(狗神)沙梓社大咖免费技术分享。

    序言 简介:本文针对于广大iOS开发者,作为一名开发者,仅仅专注于一门语言可能已经不适用现在的市场需求,曾经因高薪和需求量巨大,而火爆一时的移动端开发者(Android,ios),如今的路却是不再那么 ...

  9. FTP环境搭建及客户代码调用公共方法封装

    一.背景 大型系统架构往往被分解为多个独立可运行的组件, 以满足性能.可靠性.可扩展性的需求.多个组件间的数据交互往往采用两种方式:小量数据通过Sock函数.RMI.WebService等接口方式传递 ...

  10. Notepad++ JSON关键字自动提示

    Notepad++关键字自动提示 2017-08-31 目录 1 插件安装2 往JSON中加关键字3 智能提示 最近接口测试自动化框架的的case是json格式,用例的json的格式是固定的,定义专门 ...