AT2664 [AGC017A] Biscuits 题解
Content
有一个长度为 \(n\) 的数列 \(a\)。你希望从中选出一些数,使得这些数的和对 \(2\) 取模后的结果为 \(P\)。求方案数。
数据范围:\(1\leqslant n\leqslant 50\),\(0\leqslant P\leqslant 1\),\(1\leqslant a_i\leqslant 100\)。
Solution
做完之后转了一圈,发现本题题解区现有题解全部都是 dp 做法。所以本人在这里来一发无脑数数做法。
不难发现,对于某组数,其和的奇偶性只和这组数中奇数的个数有关。如果奇数的个数为奇数,这组数的和就是奇数,否则就是偶数。
知道这个东西之后,这道题目就很简单了。我们先统计出数列 \(a\) 中的奇数个数 \(k\)。然后我们先考虑取多少个偶数,再考虑取多少个奇数。但是取奇数的时候要注意:如果 \(k\bmod 2\neq P\),奇数就只能够取奇数个,否则就只能取偶数个。至于偶数你随便取多少个都可以。
因此,我们可以分类讨论求出式子:
- \(k\bmod 2=P\),此时奇数只能够取偶数个,因此方案数为 \(\sum\limits_{i=0}^k\sum\limits_{j=0}^{n-k}\begin{pmatrix}k\\i\end{pmatrix}\begin{pmatrix}n-k\\j\end{pmatrix}[2\mid i]\)。
- \(k\bmod 2\neq P\),此时奇数只能够取奇数个,因此方案数为 \(\sum\limits_{i=0}^k\sum\limits_{j=0}^{n-k}\begin{pmatrix}k\\i\end{pmatrix}\begin{pmatrix}n-k\\j\end{pmatrix}[2\nmid i]\)。
其中 \([x]\) 表示条件 \(x\) 是否为真,如果为真其值为 \(1\),否则为 \(0\)。
当然,代码实现中,我们可以灵活运用 for 循环,这样,既不用判断条件,也不需要分类讨论去求。详情请结合代码理解。
Code
日常用 #define int ll 偷懒(
namespace Solution {
#define int ll
int n, p, cnt0, cnt1, ans, a[57], C[57][57];
iv Main() {
F(int, i, 0, 50) { //预处理组合数
C[i][0] = 1;
F(int, j, 1, i) C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
}
read(n, p);
F(int, i, 1, n) read(a[i]), cnt0 += !(a[i] & 1), cnt1 += a[i] & 1;
F(int, i, 0, cnt0) Fo(int, j, ((cnt1 & 1) != p), cnt1, 2) ans += C[cnt0][i] * C[cnt1][j];
write(ans);
return;
}
#undef int
}
AT2664 [AGC017A] Biscuits 题解的更多相关文章
- [题解] Codeforces 1349 D Slime and Biscuits 概率,推式子,DP,解方程
题目 神题.很多东西都不知道是怎么凑出来的,随意设置几个变量,之间就产生了密切的关系.下次碰到这种题应该还是不会做罢. 令\(E_x\)为最后结束时所有的饼干都在第x个人手中的概率*时间的和.\(an ...
- AtCoder Grand Contest 017 题解
A - Biscuits 题目: 给出 \(n\) 个物品,每个物品有一个权值. 问有多少种选取方式使得物品权值之和 \(\bmod\space 2\) 为 \(p\). \(n \leq 50\) ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
随机推荐
- 拨开由问题《linux下malloc最大可申请的内存》带来的重重疑云
今天阅读相关书籍的时候看到 "进程中堆的最大申请数量" 这一问题,我们知道使用malloc分配内存是在堆Heap里面分配的,如果一台机器一共有8GB物理内存,空闲5GB,那么我们使 ...
- Python字符出现次数统计
1.读取文本文档 红球.txt 2.运行代码 with open('红球.txt', "r", encoding="utf-8")as f: d = {} fo ...
- JSOI 2008 最小生成树计数
JSOI 2008 最小生成树计数 今天的题目终于良心一点辣 一个套路+模版题. 考虑昨天讲的那几个结论,我们有当我们只保留最小生成树中权值不超过 $ k $ 的边的时候形成的联通块是一定的. 我们可 ...
- DIA技术及其软件工具介绍
前言 关于蛋白质组学,你是不是已经听了太多公司的宣讲,介绍了一大堆的技术名词,反而越听越懵懂,脑袋一团乱麻?就和传话游戏一样,当我们接收了多手信息以后,得到的信息就越不准确.那么,何不自己看一看第一手 ...
- Oracle——listener数据库监听 lsnrctl
lsnrctl(Listener Control)是一个SQL*Net工具,用于控制数据库listener,这个工具提供了命令用于控制listener的启动.停止,查看listener的状态,改变li ...
- kubernetes部署 kube-apiserver服务
kubernetes部署 kube-apiserver 组件 本文档讲解使用 keepalived 和 haproxy 部署一个 3 节点高可用 master 集群的步骤. kube-apiserve ...
- 搭建简单的SpringCloud项目二:服务层和消费层
GitHub:https://github.com/ownzyuan/test-cloud 前篇:搭建简单的SpringCloud项目一:注册中心和公共层 后篇:搭建简单的SpringCloud项目三 ...
- Python | 迭代器与zip的一些细节
首先抛出一个困扰本人许久的问题: nums = [1,2,3,4,5,6] numsIter = iter(nums) for _ in zip(*[numsIter]*3): print(_) pr ...
- 基于Kubernetes实现前后端应用的金丝雀发布
基于Kubernetes实现前后端应用的金丝雀发布 公司的研发管理平台实现了Gitlab+Kubernetes的Devops,在ToB和ToC场景中,由于用户量大,且预发布环境和生产环境或多或少存在差 ...
- 在C++的map类型中按value排序
1.将map转化为vector类型 2.使用sort函数对vector进行排序,写出compare比较器函数 3.比较器中指明按照第几个元素来排序 1 #include <iostream> ...