LOJ6356 四色灯
时间:2019-12-18
本文章向大家介绍LOJ6356 四色灯,主要包括LOJ6356 四色灯使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意
有\(1-n\)的数和\(m\)个操作。进行\(a_i\)操作时,会将\(a_i\)的倍数权值\(+1\)。
对于每个操作可以选择是否进行,问对于所有情况,权值整除\(4\)的格子总数
\(n \leq 10^9,m \leq 20\)
思路
首先考虑暴力,即对于每个数\(nm\)求出有多少个操作会影响到它,答案即为\(\sum C(cnt,4k)\times 2^{m-cnt}\)
瓶颈在于前半部分。
因为操作个数较少,可以考虑枚举因数集合,设\(f[S]\)表示能整除\(S\)中所有数的\(x\)的个数。
\(f[S]=\frac{n}{lcm(x \in S)}\)。
\(g[S]\)表示\(S\)是\(x\)所有因数的\(x\)的个数,那么可以通过枚举子集的容斥来得到,但是会T。
注意到最后的答案只和个数有关,就是\(|S|\),所以我们不需要关心具体的集合。
另\(F[i]=\sum_{|S|=i}f[S]\),\(G[i]=\sum_{|S|=i}g[S]\)。
\(F\)很好求,问题转化为如何容斥求得\(G\),对于\(F[j]\)和\(G[i](j>i)\),显然\(F[j]\)会在\(G[i]\)中多算\(C(j,i)\)次。容斥式有点麻烦,我就不写了。
#include <bits/stdc++.h>
const int mu=998244353;
int n,m,a[25],f[25],g[25],ans,c[25][25];
int gcd(int x,int y){
if (x%y==0) return y;
return gcd(y,x%y);
}
int sgn(int x){
return x&1?mu-1:1;
}
int ksm(int x,int y){
int ans=1;
for (;y;y>>=1,x=x*1ll*x%mu)
if (y&1) ans=ans*1ll*x%mu;
return ans;
}
int main(){
scanf("%d%d",&n,&m);
c[0][0]=1;
for (int i=1;i<=20;i++){
c[i][0]=1;
for (int j=1;j<=i;j++)
c[i][j]=(c[i-1][j]+c[i-1][j-1])%mu;
}
for (int i=0;i<m;i++) scanf("%d",&a[i]);
for (int i=0;i<1<<m;i++){
long long lcm=1;
int S=0;
for (int j=0;j<m;j++)
if (i&(1<<j)){
S++;
lcm=lcm/gcd(lcm%a[j],a[j])*a[j];
if (lcm>n) break;
}
f[S]+=n/lcm;
}
for (int i=m;i>=0;i--){
g[i]=f[i];
for (int j=i+1;j<=m;j++)
g[i]=(g[i]+sgn(j-i)*1ll*f[j]%mu*c[j][i])%mu;
}
for (int i=0;i<=m;i++)
for (int k=0;k<=m;k+=4)
ans=(ans+g[i]*1ll*c[i][k]%mu*(1<<(m-i)))%mu;
ans=ans*1ll*ksm(1<<m,mu-2)%mu;
printf("%d\n",ans);
}
后记
想不到系列
原文地址:https://www.cnblogs.com/flyfeather6/p/12059254.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- R使用LASSO回归预测股票收益
- Linux 常用系统工作命令-reboot、poweroff、wget
- Node.js + Socket.io 实现一对一即时聊天
- Linux 常用系统工作命令-ps、top
- Python之LDA主题模型算法应用
- R语言highfrequency高频金融数据导入
- IIS配置优化
- R语言做复杂金融产品的几何布朗运动的模拟
- R语言数据的收益率和可能的波动性交易
- 哈希算法的设计要点及应用场景
- R语言通过WinBUGS对MGARCH和MSV模型进行贝叶斯估计和比较
- Spring Boot中使用 Swagger2 自动构建API文档
- dotNET:怎样处理程序中的异常(理论篇)?
- xmake从入门到精通12:通过自定义脚本实现更灵活地配置
- ggplot2火山图展示RNAseq差异表达分析结果