容斥大法妙~其实网上很多的题解虽然给出了容斥系数,但是并没有说明为什么是这个样子的。在这里解释一下好了。

  考虑用容斥,实际上就是让 \(ans = \sum_{T\subseteq S}^{\ }f_{T}*h_{T}\)。其中,\(f\) 为容斥的系数,而 \(h\) 为一个集合的‘贡献’。这个贡献的值往往对于集合当中的各个元素而言是独立的。由于这题中是要我们求出所有的被操作了奇数次的灯的数量,所以有:

\(g_{x}=\sum_{i = 1}^{x}\binom{x}{i}*f_{i}=[x\&1]\)

\(g_{x}\) 为是原数列中 \(x\) 个数的倍数的数所对答案产生的贡献

令\(f[0] = 0\),

则\(g_{x}=\sum_{i = 0}^{x}\binom{x}{i}*f_{i}=[x\&1]\)

那么根据二项式反演,有

\(f_x = \sum_{i = 0}^{x} g_i * \binom{x}{i}*(-1)^{x - i}\)

\(f_x = \sum_{i = 0}^{x}\binom{x}{i}*(-1)^{x - i}[x\&1]\)

根据\(f_x = \sum_{i = 0}^{x}\binom{x}{i}*(-1)^{x - i}[x\&1]\)

对\(x\) 的奇偶性分类讨论一下,再加上:

\(\binom{n}{1}+\binom{n}{3}+\binom{n}{5}...=2^{n - 1}\)

(这个式子就不用解释了吧……)

然后就得到了\(f_x\) 的表达式~

  下面这份代码为 \(n^{2}\) 求出容斥系数,但实际上可以按照上文所说做到\(O(1)\)……

#include <bits/stdc++.h>
using namespace std;
#define maxn 1000
#define int long long
int n, m, ans, cnt, S[maxn];
int f[maxn], a[maxn], C[maxn][maxn]; int read()
{
int x = , k = ;
char c; c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} void Pre()
{
for(int i = ; i < ; i ++) C[i][] = ;
for(int i = ; i < ; i ++)
for(int j = ; j < ; j ++)
C[i][j] = C[i - ][j - ] + C[i - ][j];
} int Get(int x)
{
int t = x & ;
for(int i = ; i < x; i ++)
t -= C[x][i] * f[i];
return t;
} int gcd(int a, int b)
{
int c = ;
while(b) c = a % b, a = b, b = c;
return a;
} void dfs(int now)
{
if(now == m + )
{
int lcm = ;
for(int i = ; i <= cnt; i ++)
lcm = lcm * S[i] / gcd(lcm, S[i]);
ans += f[cnt] * (n / lcm);
return;
}
S[++ cnt] = a[now]; dfs(now + );
cnt --; dfs(now + );
} signed main()
{
int T = read(); f[] = ; f[] = ; Pre();
for(int i = ; i <= ; i ++) f[i] = Get(i);
for(int i = ; i <= T; i ++)
{
n = read(), m = read(); ans = ;
for(int j = ; j <= m; j ++) a[j] = read();
dfs();
printf("%lld\n", ans);
}
return ;
}

【题解】玲珑杯河南专场17B的更多相关文章

  1. “玲珑杯”线上赛 Round #17 河南专场

    闲来无事呆在寝室打打题,没有想到还有中奖这种操作,超开心的 玲珑杯”线上赛 Round #17 河南专场 Start Time:2017-06-24 12:00:00 End Time:2017-06 ...

  2. “玲珑杯”线上赛 Round #17 河南专场 B:震惊,99%+的中国人都会算错的问题(容斥计算)

    传送门 题意 略 分析 是一道稍微变形的容斥题目,容斥一般的公式 \[ans=\sum_iAi-\sum_{i<j}{Ai∩Aj}+\sum_{i<j<k}{Ai∩Aj∩Ak}+.. ...

  3. “玲珑杯”线上赛 Round #17 河南专场 A: Sin your life(和化积公式)

    传送门 题意 略 分析 首先将sin(x)+sin(y)+sin(z)h转化成\(2*sin(\frac{x+y}2)*cos(\frac{x-y}2)+sin(z)\),而cos(z)=cos(-z ...

  4. 玲珑oj 1128 RMQ模板

    1128 - 咸鱼拷问 Time Limit:3s Memory Limit:128MByte Submissions:380Solved:118 DESCRIPTION 给你两个序列A,B.每个序列 ...

  5. 玲珑oj 1129 ST

    1129 - 喵哈哈村的战斗魔法师丶坏坏い月 Time Limit:3s Memory Limit:256MByte Submissions:490Solved:107 DESCRIPTION 坏坏い ...

  6. GOOD BYE OI

    大米饼正式退役了,OI给我带来很多东西 我会的数学知识基本都在下面了 博客园的评论区问题如果我看到了应该是会尽力回答的... 这也是我作为一个OIer最后一次讲课的讲稿 20190731 多项式乘法 ...

  7. “玲珑杯”ACM比赛 Round #12题解&源码

    我能说我比较傻么!就只能做一道签到题,没办法,我就先写下A题的题解&源码吧,日后补上剩余题的题解&源码吧!                                     A ...

  8. “玲珑杯”ACM比赛 Round #19题解&源码【A,规律,B,二分,C,牛顿迭代法,D,平衡树,E,概率dp】

    A -- simple math problem Time Limit:2s Memory Limit:128MByte Submissions:1599Solved:270 SAMPLE INPUT ...

  9. “玲珑杯”ACM比赛 Round #1 题解

    A:DESCRIPTION Eric has an array of integers a1,a2,...,ana1,a2,...,an. Every time, he can choose a co ...

随机推荐

  1. android安卓生成密钥keystore(命令控制)

    android安卓生成密钥keystore(命令控制) • 配置JDK 详细教程 https://blog.csdn.net/u012934325/article/details/73441617/ ...

  2. SQL常见面试题

    1.用一条SQL 语句 查询出每门课都大于80 分的学生姓名 name   kecheng   fenshu张三    语文       81张三     数学       75李四     语文   ...

  3. 随机图片api

    什么是随机图片api 随机图片api是什么呢?通俗的讲就是当你访问一个api时,浏览器会随机返回给你一张图片. 其实原理很简单,把你要随机的图片放在一起,然后写一个php,当php被访问时,就随机指向 ...

  4. 【Unity Shader】渲染管线

    流程概述 应用程序阶段 应用程序阶段,使用高级编程语言(C.C++.JAVA 等)进行开发,主要和CPU.内存打交道,诸如碰撞检测.场景图建立.空间八叉树更新.视锥裁剪等经典算法都在此阶段执行.在该阶 ...

  5. Netty源码分析第4章(pipeline)---->第4节: 传播inbound事件

    Netty源码分析第四章: pipeline 第四节: 传播inbound事件 有关于inbound事件, 在概述中做过简单的介绍, 就是以自己为基准, 流向自己的事件, 比如最常见的channelR ...

  6. 通过iLO进行Zabbix监控——针对HP服务器集成

    iLO 全名是 Integrated Lights-out,它是惠普某些型号的服务器上集成的远程管理端口,它能够允许用户基于不同的操作系统从远端管理服务器,实现了虚拟存在和控制,从而进行智能型基础构架 ...

  7. python如何与以太坊交互并将区块链信息写入SQLite

    关于区块链介绍性的研讨会通常以易于理解的点对点网络和银行分类账这类故事开头,然后直接跳到编写智能合约,这显得非常突兀.因此,想象自己走进丛林,想象以太坊区块链是一个你即将研究的奇怪生物.今天我们将观察 ...

  8. HTML常用头部变量

    简例:访问baidu的头部 GET /?tn=98827400_hao_pg HTTP/1.1 Host: www.baidu.com Connection: keep-alive Cache-Con ...

  9. Redux和React-Redux的实现(二):Provider组件和connect的实现

    接着上一篇讲,上一篇我们实现了自己的Redux和介绍了React的context以及Provider的原理. 1. Provider组件的实现 Provider组件主要有以下下两个作用 在整个应用上包 ...

  10. LeetCode 404. Sum of Left Leaves (C++)

    题目: Find the sum of all left leaves in a given binary tree. Example: 3 / \ 9 20 / \ 15 7 There are t ...