[LOJ6356]四色灯

题目大意:

有\(n(n\le10^9)\)个编号\(1\sim n\)的格子和\(m(m\le20)\)个按钮。每个格子有一个初始为\(0\)的数,每个按钮有一个数字\(a_i\),表示若这个按钮被选中,编号为\(a_i\)倍数的格子上的数字\(+1\)。

现在随机选取一个按钮的集合,求数值为\(4\)的倍数的格子的期望个数。

思路:

用\(f(S)\)表示\(1\sim n\)中,编号为\(\operatorname{lcm}(S)\)的倍数的格子数。

\(g(S)\)表示\(1\sim n\)中,编号\(x\)为\(\operatorname{lcm}(S)\)的倍数,且不存在集合\(T\),满足\(S\in T\)且\(\operatorname{lcm}(T)|x\)的格子数。

则答案为\(\sum\limits_{S}g(S)\sum\limits_{k}{|S|\choose 4k}\cdot2^{m-4k}\)。

时间复杂度\(\mathcal O(3^m)\)。

由于相同大小的集合,其贡献可以一起算。因此我们用\(G(x)\)表示\(\sum\limits_{|S|=x}g(S)\),则最终答案可表示为\(\sum\limits_{i}g(i)\sum\limits_{k}{i\choose 4k}\cdot2^{m-4k}\)。

时间复杂度\(\mathcal O(2^mm)\)。

源代码:

#include<cstdio>
#include<cctype>
#include<algorithm>
#define popcount __builtin_popcount
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
typedef long long int64;
const int M=21,mod=998244353;
int a[M],f[M],g[M],c[M][M];
void exgcd(const int &a,const int &b,int &x,int &y) {
if(!b) {
x=1,y=0;
return;
}
exgcd(b,a%b,y,x);
y-=a/b*x;
}
inline int inv(const int &x) {
int ret,tmp;
exgcd(x,mod,ret,tmp);
return (ret%mod+mod)%mod;
}
int main() {
const int n=f[0]=getint(),m=getint();
for(register int i=0;i<=m;i++) {
for(register int j=c[i][0]=1;j<=i;j++) {
c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
}
}
for(register int i=0;i<m;i++) {
a[i]=getint();
}
for(register int s=1;s<1<<m;s++) {
int64 lcm=0;
for(register int i=0;i<m;i++) {
if((s>>i)&1) {
lcm=lcm?lcm*a[i]/std::__gcd(lcm,1ll*a[i]):a[i];
}
if(lcm>n) break;
}
(f[popcount(s)]+=n/lcm)%=mod;
}
std::copy(&f[0],&f[m]+1,g);
for(register int i=m;i>=0;i--) {
for(register int j=i+1;j<=m;j++) {
g[i]-=1ll*g[j]*c[j][i]%mod;
(g[i]+=mod)%=mod;
}
}
int ans=0;
for(register int i=0;i<=m;i++) {
int tmp=0;
for(register int j=0;j<=i;j+=4) {
(tmp+=1ll*c[i][j]*(1<<(m-i))%mod)%=mod;
}
(ans+=1ll*g[i]*tmp%mod)%=mod;
}
printf("%lld\n",1ll*ans*inv(1<<m)%mod);
return 0;
}

[LOJ6356]四色灯的更多相关文章

  1. LOJ6356 四色灯(容斥+dp

    纪念第一次所有的解析全写在代码里面 QWQ 这里就简单说几句了 首先一个灯有贡献,当且仅当他被按了\(4k\)次. 那么我们定义\(f(S)\)表示\([1,n]\)中有多少个数\(x\)是集合\(S ...

  2. .NET应用架构设计—面向对象分析与设计四色原型模式(彩色建模、领域无关模型)(概念版)

    阅读目录: 1.背景介绍 2.问自己,UML对你来说有意义吗?它帮助过你对系统进行分析.建模吗? 3.一直以来其实我们被一个缝隙隔开了,使我们对OOAD遥不可及 4.四色原型模式填补这个历史缝隙,让我 ...

  3. DDD:四色原型中Role的 “六” 种实现方式

    背景 一个实体在不同的上下文中具备不同的职责,如:产品在“生产完成上下文”中具备的一些职责,在“质检相关上下文”中具备另外一些职责.四色原型.DIC和“UML事物模式”在不同的维度阐述了这一情况,在代 ...

  4. .NET应用架构设计—四色原型模式(色彩造型、域无关的模型)(概念版)

    阅读文件夹: 1.背景介绍 2.问自己,UML对你来说有意义吗?它帮助过你对系统进行分析.建模吗? 3.一直以来事实上我们被一个缝隙隔开了,使我们对OOAD遥不可及 4.四色原型模式填补这个历史缝隙, ...

  5. DDD:四色原型中Role的 “六” 种实现方式和PHP的Swoole扩展

    目录 背景六种实现方式第一种:未显式体现角色的模式.第二种:使用“显式接口”显式体现角色的模式.第三种:使用“扩张方法”显式体现角色的模式.第四种:使用“领域服务”显式体现角色的模式.第五种:使用“包 ...

  6. 四色GDOI&GDOI2015滚粗记

    好吧自己太弱写不了什么四色NOI只能学学别人写个四色GDOI了...首先自己还是太弱所以就被学校卡了个名额就进不了省队了QAQ.自己GDOI觉得考得不错可是NOIP毕竟少了人家5分根本追不上去好不QA ...

  7. POJ-1129 DFS染色+四色原理的应用

    OJ-ID:     POJ-1129 author:    Caution_X date of submission:    20190927 tags:    DFS+四色原理的应用 descri ...

  8. [ZigBee] 13、ZigBee基础阶段性回顾与加深理解——用定时器1产生PWM来控制LED亮度(七色灯)

    引言:PWM对于很多软件工程师可能又熟悉又陌生,以PWM调节LED亮度为例,其本质是在每个周期都偷工减料一些,整体表现出LED欠压亮度不同的效果.像大家看到的七色彩灯其原理也类似,只是用3路PWM分别 ...

  9. 基于arm开发板四个按键控制四个灯亮

    基于s5pv2410,cortex a8的四个按键每一个按键点了对应的灯 对于用汇编来编程的话不难,重点在于数据手册,电路图,管脚的看懂 直接上代码 .globl _start_start: ldr ...

随机推荐

  1. springboot配置Druid监控

    整体步骤: (1)    ——   Druid简单介绍,具体看官网: (2)     —— 在pom.xml配置druid依赖包: (3)    ——  配置application.propertie ...

  2. jenkins上节点显示swap空间不足解决方案

    查看内存占用情况:free   -m   1.swap分区原理: swap分区在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时 ...

  3. UI开发总结

    1. bootstrap tooltip 修改内容 <i class="ace-icon fa fa-user" id="test-tooltip" ti ...

  4. youtube-dl更新出错解决办法

    youtube-dl更新命令: youtube-dl -U 更新报错:无法识别当前版本 ERROR: can't find the current version. Please try again ...

  5. STL容器之优先队列

    STL容器之优先队列 优先级队列,以前刷题的时候用的比较熟,现在竟然我只能记得它的关键字是priority_queue(太伤了).在一些定义了权重的地方这个数据结构是很有用的. 先回顾队列的定义:队列 ...

  6. C# 操作windows服务[启动、停止、卸载、安装]

    主要宗旨:不已命令形式操作windows服务 static void Main(string[] args) { var path = @"E:\开发辅助项目\WCF\WCF.Test\WC ...

  7. Windows配置Apache服务器

    下载的Apache版本:httpd-2.4.32-o102n-x64-vc14 简单粗暴式配置: 1.打开\conf\httpd.conf修改第60行和第224行,其中8081是电脑上没有被使用的端口 ...

  8. bzoj4059

    题解: 还是一道不错的题目 首先它要求每个区间都满足要求,所以我们很容易想到将它映射到二维平面上 然后我们算出每个数的前驱以及后继li,ri 那么第一维是li-i,第二维是i-ri的区间就是合法的,同 ...

  9. python之logging

    1.简单使用 # CRITICAL, ERROR, WARNING, INFO, DEBUG) cewid import logging logging.basicConfig(level=loggi ...

  10. rimraf node_modules 快速删除

     npm install -g rimraf   // 先进行全局安装 rimraf node_modules   // 进行删除   -------------------------------- ...