题意

\(t\) 组询问,给你 \(A, B, C\) ,问有多少组三元组 \((a, b, c)\) 满足他们任意排列后有: \(a|A,\ b|B,\ c|C\) 。

\(A,B,C,t\leq 10^5\)

分析

  • 我们把三个数的所有因子用 \(2^3 - 1\) 个状态表示这个数是 \(A,B,C\) 中的哪几个数字的因子。

  • 按照从小到大的顺序枚举3个数对应的集合,首先保证能够找到一种对应方式(每个数对应是谁的因子),相同的数集利用插板法计算方案避免重复。

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cctype>
#include<vector>
#include<queue>
#define For(s) for(int s=1;s<8;s++)
using namespace std;
const int N=1e5 + 7;
typedef long long LL;
int n,T;
int sz[8],A[8],f[8],b[8]={0,1,1,2,1,2,2,3};
LL ans,tmp;
int gcd(int a,int b){
if(!b) return a;
return gcd(b,a%b);
}
int get(int x){
int res=0;
for(int i=1;i<=sqrt(x);i++)if(x%i==0){
res++;
if(i*i!=x) res++;
}
return res;
}
bool check(int a,int b,int c){
if((a&1) && (b&2) && (c&4)
return true;
if((a&1) && (c&2) && (b&4))
return true;
if((b&1) && (a&2) && (c&4))
return true;
if((b&1) && (c&2) && (a&4))
return true;
if((c&1) && (a&2) && (b&4))
return true;
if((c&1) && (b&2) && (a&4))
return true;
return false;
}
LL C(int n,int m){
if (m == 0) return 1;
if (m == 1) return n;
if (m == 2) return 1ll * n * (n - 1) / 2;
if (m == 3) return 1ll * n * (n - 1) * (n - 2) / 6;
}
void work(){
scanf("%d%d%d",&A[0],&A[1],&A[2]);
ans=0; memset(sz,0,sizeof(sz));
memset(f,0,sizeof(f));
For(S){
for(int i=0;i<3;i++) if(S>>i&1){
if(!f[S]) f[S]=A[i];
else f[S]=gcd(f[S],A[i]);
}
f[S]=get(f[S]);
}
For(s) For(S)if((S&s)==s){
int cnt=b[S]-b[s];
sz[s]+=f[S]*(cnt&1?-1:1);
}
For(s1)for(int s2=s1;s2<8;s2++)for(int s3=s2;s3<8;s3++){
if(check(s1,s2,s3)){
tmp=1;int cnt=1,cho=233;
if(s1==s2) cho=s1,cnt++;
if(s2==s3) cho=s2,cnt++;
if(s1^cho) tmp*=sz[s1];
if(s2^cho) tmp*=sz[s2];
if(s3^cho) tmp*=sz[s3];
if(cnt^1) tmp*=C(sz[cho]+cnt-1,cnt);
ans+=tmp;
}
}
printf("%lld\n",ans);
}
int main(){
scanf("%d",&T);
while(T--) work();
return 0;
}

[CF1007B]Pave the Parallelepiped[组合计数+状态压缩]的更多相关文章

  1. 2021蓝桥杯省赛C++A组试题E 回路计数 状态压缩DP详细版

    2021蓝桥杯省赛C++A组试题E 回路计数 状态压缩DP 题目描述 蓝桥学院由21栋教学楼组成,教学楼编号1到21.对于两栋教学楼a和b,当a和b互质时,a和b之间有一条走廊直接相连,两个方向皆可通 ...

  2. CF1007B Pave the Parallelepiped 容斥原理

    Pave the Parallelepiped time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  3. HDU 4921 Map DFS+状态压缩+乘法计数

    算最多十条链,能截取某前缀段,每种方案都可以算出一个权值,每种方案的概率都是总数分之一,问最后能构成的所有可能方案数. 对计数原理不太敏感,知道是DFS先把链求出来,但是想怎么统计方案的时候想了好久, ...

  4. POJ 3254. Corn Fields 状态压缩DP (入门级)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9806   Accepted: 5185 Descr ...

  5. POJ3254Corn Fields(状态压缩DP入门)

    题目链接 题意:一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相邻.问有多少种放牛方案(一 ...

  6. HDU4628+状态压缩DP

    /* 状态压缩DP dp[ i ]:达到i状态的最小step. 题意:每次可以去掉一个回文串,求最少几步能取完. */ #include<stdio.h> #include<stri ...

  7. hdu4670(树上点分治+状态压缩)

    树上路径的f(u,v)=路径上所有点的乘积. 树上每个点的权值都是由给定的k个素数组合而成的,如果f(u,v)是立方数,那么就说明f(u,v)是可行的方案. 问有多少种可行的方案. f(u,v)可是用 ...

  8. 状态压缩dp入门

    poj1321 http://poj.org/problem?id=1321 我们可以把棋盘的每一行看做是一个状态,如果某一列放置了棋子,那么就标记为1,否则就标记为0.然后把它看成是一个二进制数,然 ...

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

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

随机推荐

  1. go语言练习:通道、协程

    1.通道的简单例子: package main import "fmt" func main() { channel:=make(chan string) //创建了一个通道对象 ...

  2. GIT回推本地commit近期版本

    一次意外吧,本地add并且commit之后拉了别人错误的代码下来,后来本地又需要进行编写测试,无奈只能回推到自己刚刚commit过的代码,但是git命令除了拉去提交等其他的不是很熟悉,在度娘之后也遇到 ...

  3. 监控文件内容变化,即时写入到新文件(tail)

    监控文件a,如有新内容写入,即时将新内容写入到新文件aa中: fw=open('e:\\aa.txt','ab') with open('e:\\a.txt','rb') as fo: while T ...

  4. cdn刷新和对应的浏览器现象

    1.浏览器手动点刷新,会发起网络请求,从cdn判断last-modify时间是否一致,未过期则返回304,如果已经过期则返回200,重新请求 关键在于发起的网络请求中'If-Modified-Sinc ...

  5. Innodb的体系结构

    MySQL的体系结构,两部分组成:MySQL的server层和存储引擎层. 存储引擎层innodb体系结构: innodb的整个体系结构就是由多个内存块组成的缓冲池及多个后台进程组成.我们可以从三方面 ...

  6. 高斯求积公式 matlab

    1. 分别用三点和四点Gauss-Chebyshev公式计算积分 并与准确积分值2arctan4比较误差.若用同样的三点和四点Gauss-Legendre公式计算,也给出误差比较结果. 2*atan( ...

  7. docker18.ce harbor 安装

     Harbor 是什么? harbor VMware 开发的一个容器镜像仓库,harbor的功能提供用户权限管理.镜像复制等功能,提高使用的registry的效率. 安装最新版的docker可以参考d ...

  8. [BZOJ 3167][HEOI 2013]SAO

    [BZOJ 3167][HEOI 2013]SAO 题意 对一个长度为 \(n\) 的排列作出 \(n-1\) 种限制, 每种限制形如 "\(x\) 在 \(y\) 之前" 或 & ...

  9. 基于CNN网络的汉字图像字体识别及其原理

    现代办公要将纸质文档转换为电子文档的需求越来越多,目前针对这种应用场景的系统为OCR系统,也就是光学字符识别系统,例如对于古老出版物的数字化.但是目前OCR系统主要针对文字的识别上,对于出版物的版面以 ...

  10. ModuleNotFoundError No module named urllib2

    ModuleNotFoundError No module named urllib2?那么在进行编辑的来进行代码上开发,那就会出现的来代码的上错误,也是版本的上差异导致的问题.   工具/原料   ...