【抽屉原理】

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. 攻读计算机视觉和机器学习硕士给我带来了什么?
  2. Raspberry Pi 4B 部署 YOLOX
  3. 盘点大厂的那些开源项目 - 小米科技
  4. 【UVA - 10037】Bridge(过河问题,经典贪心)
  5. Nginx配置单项SSL以及双向SSL
  6. 求求了!让 Python 的热搜消失吧!!
  7. [译] 构建流畅的交互界面
  8. 如何进行大数据分析与处理
  9. java jdk 安装教程_JDK下载安装配置教程(详细)
  10. 极域电子教室V4窗口化
  11. 餐饮水单打印软件_除了进销存,管家婆软件能做的很多!
  12. jQuery中的animate效果没有backgroundColor背景颜色属性设置--已解决
  13. 旋转木马--利用html5和css3制作好看的图片3D旋转效果
  14. 数据预处理 拉依达准则 matlab,数学建模数据预处理.doc
  15. 【bug记录】 Argument of type ‘AsyncThunkAction<void, string, {}>‘ is not assignable to parameter of type
  16. 大数据(分布式计算框架+分布式存储)
  17. ABP官方文档(五)【多租户】
  18. MicroBlaze软核扩大内存的方法
  19. Java图片处理 - 创建工具类
  20. 浙大PAT考试1013~1016(最伤的一次。。)

热门文章

  1. c++ 添加按钮_使用 Visual Studio 2019 批量添加代码文件头
  2. 给数据库减负的八个思路
  3. 黄哲铿:妙用“缓存”,应对亿级流量峰值(文末赠书)
  4. 支付窗开发实战-张代浩-专题视频课程
  5. jeewx-api-1.0.1(捷微微信接口API)版本正式发布
  6. x-requested-with 请求头 区分ajax请求还是普通请求
  7. Eclipse导出可执行JAR文件的方法
  8. 手机定位App从想法到上线运营(1)--介绍
  9. 关于推荐的一个算法工程师访谈,有一些内容值得看看
  10. Hibernate注解方式实现1-1双向关联