[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. bat 获取拖放文件路径或名称

    获取路径: @echo offset path=%~dp1echo %path%pause 获取路径及名称: @echo offset path=%~dp1%~nx1echo %path%pause

  2. 微信小程序--代码构成---WXML 模板

    WXML 模板 从事过网页编程的人知道,网页编程采用的是 HTML + CSS + JS 这样的组合,其中 HTML 是用来描述当前这个页面的结构,CSS 用来描述页面的样子,JS 通常是用来处理这个 ...

  3. Vue axios 返回数据绑定到vue对象问题

    在项目中需要用到后台的数据对前端渲染,使用到了vue整合的axios,使用vue中的钩子函数在页面组件挂载完成之后向后台发送一个get请求然后将返回后的数据赋值data()中定义的属性: 执行后前端报 ...

  4. MySQL主从数据同步延时分析

    一.MySQL数据库主从同步延迟                                                              要了解MySQL数据库主从同步延迟原理,我们 ...

  5. 删除ELK中的数据。。

    直接使用这个命令就行了: curl -XDELETE "http://127.0.0.1:9200/logstash-2017.08.19" 2017.08.19可以动态生成,   ...

  6. Redis数据库 01概述| 五大数据类型

    1.NoSQL数据库简介 解决应用服务器的CPU和内存压力:解决数据库服务的IO压力: ----->>> ① session存在缓存数据库(完全在内存里),速度快且数据结构简单: 打 ...

  7. 第一章:python基础语法| 字符编码| 条件语句...

    1.编程语言介绍 编程就是写代码,让计算机帮你做事情.计算机底层是电路,只认识二进制0和1.机器语言&汇编语言语言进化历史:机器.汇编.高级.机器语言只接受二进制代码:汇编语言是采用英文缩写的 ...

  8. 实现判断条件中有in的判断

    如果是简单的写sql,在where中写死就可以了,但是如果是不确定的参数呢,这个时候就需要一点处理方式了. 1.后台的写法 String[] operateResult=new String[]{&q ...

  9. scrapy之Crawspider 腾讯招聘实战案例

    1. 在虚拟机中cd到项目目录,再运行下面代码创建spider文件: scrapy genspider -t crawl test www.baidu.com 2. spider.py代码 impor ...

  10. apache环境配置 | httpd Could not reliably determine the server's fully qualified domain name

    apache环境配置 | httpd Could not reliably determine the server's fully qualified domain name    转 https: ...