[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. ajax之阴影效果实现(对象函数方法)

    shadow.js文件内容jQuery.fn.shadow = function () { //获取到每个已封装的元素 //this表示jQuery对象 this.each(function () { ...

  2. String 类的实现(1)浅拷贝存在的问题以及深拷贝实现

    1.   浅拷贝 : 也称位拷贝 , 编译器只是直接将指针的值拷贝过来, 结果多个对象共用 同 一块内存, 当一个对象将这块内 存释放掉之后, 另 一些对象不知道该块空间已经还给了系统, 以为还有效, ...

  3. python多线程爬取-今日头条的街拍数据(附源码加思路注释)

    这里用的是json+re+requests+beautifulsoup+多线程 1 import json import re from multiprocessing.pool import Poo ...

  4. Redis设置内存最大占用值

    Redis设置内存最大占用值: Redis设置占用物理机最大的内存 #占用最大20G maxmemory 20480mb Redis设置内存装不下了,有限删除即将过期的 当前已用内存超过maxmemo ...

  5. Leetcode刷题第003天

    一.只出现一次的数字 class Solution { public: int singleNumber(vector<int>& nums) { ; for (auto num ...

  6. Supervisor Linux程序进程管理

    Supervisor 介绍 在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.由于在linux中 ...

  7. Java 骚操作--生成二维码

    https://www.cnblogs.com/lsy131479/p/8808172.html

  8. docker运行php网站程序

    有一个之前的php网站程序需要迁移到K8S,简单调研了下. 基础镜像 官方提供了诸如php:7.1-apache的基础镜像,但是确认必要的扩展,例如gd,当然官方提供了docker-php-ext-i ...

  9. 排查Linux机器是否已被入侵

    来自--马哥Linux运维 1.入侵者可能会删除机器的日志信息 ,可以查看日志信息是否存在后者被清除 [root@zklf-server02 ~]# ll -h /var/log/ total 3.4 ...

  10. net core体系-web应用程序-4net core2.0大白话带你入门-11asp.net core 2.0 cookie的使用

    asp.net core 2.0 cookie的使用   本文假设读者已经了解cookie的概念和作用,并且在传统的.net framework平台上使用过. cookie的使用方法和之前的相比也有所 ...