【抽屉原理】

1.内容

把 n+1 件东西放入 n 个抽屉,则至少有一个抽屉里放两件或两件以上的东西。

从令一角度说,把 n-1 件东西放入 n  个抽屉,则至少一个抽屉是空的。

2.经典应用

给出一个含有 n 个数字的序列,要找一个连续的子序列,使他们的和一定是 c 的倍数

假设 sum[i] 存储整数序列中的前 i 项和

根据抽屉原理,以 sum 数组构造抽屉 drawer 数组,其保存的是最先出现的 sum[i] 的下标,当 sum 的一个元素第二次放入重复的抽屉时,输出结果。

若 sum[i] 是 c 的倍数,直接输出前 i 项即可,若 sum[i] 不是 c 的倍数,则需要计算 sum[i]%c,此时,sum[i]%c = sum[j]%c,i!=j 肯定存在,即第 j 到第 i 项数的和为 c 的倍数。

LL a[N],drawer[N];
LL sum[N];
int main(){LL c,n;while(scanf("%lld%lld",&c,&n)!=EOF&&c&&n){memset(drawer,-1,sizeof(drawer));drawer[0]=0;sum[0]=0;for(LL i=1;i<=n;i++){//计算前缀和scanf("%lld",&a[i]);sum[i]=sum[i-1]+a[i];}for(LL i=1;i<=n;i++){if(drawer[sum[i]%c]!=-1){for(LL j=drawer[sum[i]%c]+1;j<i;j++)printf("%lld ",j);printf("%lld\n",i);break;}drawer[sum[i]%c]=i;}}return 0;
}

【加法原理与乘法原理】

1.分类加法原理

做一件事,完成它有 n 类方式,第一类方式有 M1 种方法,第二类方式有 M2 种方法,…,第 n 类方式有 Mn 种方法,那么完成这件事共有 M1+M2+……+Mn 种方法。

例如:从北京到上海有火车、飞机、轮船 3 种方式,火车、飞机、轮船分别有 k1,k2,k3 个班次,那么从北京到上海有 k1+k2+k3 种方式可以到达。

2.分步乘法原理

做一件事,完成它要分成 n 个步骤,第一步有 M1 种不同的方法,第二步有 M2 种不同的方法,…,第 n 步有 Mn 种不同的方法,那么完成这件事共有 M1×M2×M3×…×Mn 种不同的方法。

例如:从北京乘坐火车到上海,需要转 3 次车,每次专车分别有 k1,k2,k3 个班次,那么从北京到上海有 k1×k2×k3 种方式可以到达。

3.联系

分类加法原理和分步乘法原理是两个基本原理,回答的都是有关做一件事的不同方法种数的问题。

两者区别在于:分类计数原理针对的是分类问题,其中各种方法相互独立,用任何一种方法都可以完成这件事;分步计数原理针对的是分步问题,各步骤中的方法相互依存,只有各个步骤都完成才算完成事情。

分类要依据同一标准划分,既必须包括所有情况,又不要交错在一起产生重复;分步则应使各步依次完成,保证整个事件得到完成,既不得多余重复,也不缺少某一步骤。

【应用】

根据研究对象的有无,一般将组合数学分为排列问题和组合问题。

其根本不同是排列问题与元素顺序有关,组合问题与元素顺序无关。

在排列与组合问题中,经常会出现计数问题,解决计数问题的思路一般有以下三种:

1)只取需要的。将各种符合条件的情形枚举出来,再利用加法原理求和。

2)先取后排。将各步符合条件的排列或组合计算出来,再根据乘法原理求积。

3)先全部取,再减去不要的。利用容斥定理,将各种符合条件的情形枚举出来,再减去不符合条件的。

关于容斥定理:点击这里

【例题】

  1. 吃糖果(HDU-1205)(抽屉原理):点击这里
  2. Find a multiple(POJ-2356)(抽屉原理):点击这里
  3. Halloween treats(HDU-1808)(抽屉原理):点击这里
  4. Polycarp's Pockets(CF-1003A)(抽屉原理):点击这里
  5. Lining Up(AtCoder-2271)(分步乘法原理):点击这里

组合数学 —— 基本计数原理相关推荐

  1. 0x35.数论 - 组合数学与计数

    目录 一.计数原理 1.加法原理 2.乘法原理 3.减法原理 二.排列组合 1.排列数 2.组合数 3.数学题 三.组合数的计算 1. 加法递推O(n2)O(n^2)O(n2) 2. 乘法递推O(n) ...

  2. 分类计数原理与分步计数原理_两种基础的计数原理

    数学离不开数字,每个数字需要统计得来,也就是计数.生活中处处都需要计数,比如最简单的数数字,将数字一个个列举出来:多个物品的排列组合的方式或完成一件事情可能的方案数量等等.仅仅通过一点点列举的方法有时 ...

  3. 分类计数原理与分步计数原理_分类加法计数原理与分步乘法计数原理的解题策略之一...

    分类加法计数原理与分步乘法计数原理 [最新考纲] 1.理解分类加法计数原理和分步乘法计数原理. 2.会用分类加法计数原理或分步乘法计数原理分析和解决一些简单的实际问题. 知 识 梳 理 1.分类加法计 ...

  4. 分类计数原理与分步计数原理_分类计数原理与分步计数原理

    分类计数原理与分步计数原理 <分类计数原理与分步计数原理 ( 一 ) >教学设计 柳州地区民族高级中学 覃艳莉 相关教材 : 人民教育出版社的全日制普通高级中学教科书 ( 必修 ) < ...

  5. 分类计数原理与分步计数原理_《分类加法计数原理与分步乘法计数原理》教学设计...

    一.本节课教学内容的本质.地位.作用分析 分类加法计数原理与分步乘法计数原理是人类在大量的实践经验的基础上归纳出的基本规律,它们不仅是推导排列数.组合数计算公式的依据,而且其基本思想方法也贯穿在解决本 ...

  6. 分类计数原理与分步计数原理_分类or分步?计数原理别再傻傻分不清~

    分类计数原理和分步计数原理是人们在大量实践经验的基础上归纳抽象出来的基本规律,它们不仅是推导排列数.组合数计算公式的理论基础,而且其基本思想方法贯穿在整个排列.组合问题之中. 通过学习梳理希望能帮大家 ...

  7. 略谈基本计数原理和排列组合

    文章目录 基本计数原理 加法原理 乘法原理 排列 组合 基本计数原理 加法原理 分类相加 例: Mr.bean有n1,n2,n3-nx种方法从伦敦到利物浦,则总方法数为sum{n1,n2,n3,--, ...

  8. shared_ptr的引用计数原理

    引用计数原理 指向相同资源的所有 shared_ptr 共享"引用计数管理区域",并采用原子操作保证该区域中的引用计数值被互斥地访问."引用计数管理区域"是指通 ...

  9. 大数据计数原理1+0=1这你都不会算(一)No.47

    hello哈,大家是不是好久没见到我啦?我也是一直在摸索小伙伴们喜欢看到什么东西,不喜欢看什么东西,还请大家多多支持.为了表示感谢.小蕉在这给你们一鞠躬,二鞠躬,三.事不过三~ 1+0=1你都不会谈什 ...

最新文章

  1. php遍历文件夹下文件内容_PHP遍历某文件夹下的文件与文件夹名
  2. 推荐系统+覆盖率(coverage)
  3. 逃离伪PHP程序员应该做的事
  4. 八种反应表示员工认可你
  5. css:中文词不断开,整体换行
  6. TQ210裸机编程(4)——按键(中断法)
  7. React开发(258):react项目理解 ant design debug
  8. STL源码剖析 第七章 仿函数(函数对象)
  9. Shield——开源的移动端页面模块化开发框架
  10. [HTTP] 跨域资源共享
  11. LAV Filter 源代码分析 3: LAV Video (1)
  12. 龙芯rtc时间关机重启后不能保存问题分析
  13. Hutool常用工具
  14. 2021年焊工(初级)模拟考试及焊工(初级)作业考试题库
  15. Markdown入门指南
  16. Win10 开机默认开启数字小键盘的方法
  17. Apache2 + PHP之伪静态
  18. 第五次任务之三大抽样分布
  19. 【踩坑专栏】Field XXX required a bean of type ‘xx.xx.XXX‘ that could not be found.
  20. 计算机组装步骤图文详叙,详叙法

热门文章

  1. 哪些数据库是行存储?哪些是列存储?有什么区别?
  2. 一个月读完6本书?这些烧脑神书,你能读完1本,就是学霸!
  3. 20 行 Python 代码说清量子霸权!
  4. 2018世界杯数据清单:真球迷看球必备,伪球迷速成指南(附完整赛程)
  5. 成为大数据顶尖程序员,先过了这些Hadoop面试题!(附答案解析)
  6. 看 B 站,可以更快!
  7. 乔新亮:以赢为终,三个月打造一支硬核IT团队
  8. Oracle的Endgame,或被Amazon收购或自生自灭?
  9. SpringCloud微服务(04):Turbine组件,实现微服务集群监控
  10. MySQL学习笔记_10_MySQL高级操作(下)