【抽屉原理】

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. 团队项目博客---移山小分队---3
  2. Web开发(一)·期末不挂之第三章·HTML基础二(html实现表格和表单)
  3. 【PP】其他类型BOM备忘录
  4. 课后作业-阅读任务3
  5. 库存管理与订单的控制
  6. 基于WinSvr2012共享文件夹的Hyper-V实时迁移之二文件服务器及迁移用虚拟机的创建...
  7. 华人小伙在美开网店卖鞋 一年销售额超八亿
  8. c语言程序实例100题,C 练习实例3
  9. 开启binary log功能
  10. 烤仔TVのCCW丨密码学通识(二)什么是“安全的加密”
  11. Zookeeper介绍、原理及应用
  12. Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(四)数据屏幕
  13. Echarts 里的桑基图
  14. Netapp常用命令
  15. 【房间墙上凿个洞,看你在干嘛~】安全攻防内网渗透-绕过防火墙和安全检测,搭建DNS隐蔽隧道
  16. 全球时区查询 API数据接口
  17. H5实现一键复制微信并打开微信跳转好友添加页
  18. 如何关闭win10防火墙_Win技巧 | 如何关闭防火墙
  19. 狼人杀要做社交,绕不开语音视频连麦 | 深度
  20. 基于autojs7的亚丁号点淘辅助

热门文章

  1. Linux调试时常见问题,C程序在linux下调试时经常出现的问题
  2. 一觉醒来,没有购房资格了!
  3. 都说变量有七八种,到底谁是 Java 的亲儿子
  4. 程序员造轮子的正确姿势
  5. 原创|面试官:线上服务器CPU占用率高如何排查定位问题?
  6. 原创 | 一文了解那些和Spring Bean有关的那些注解!
  7. JimuReport积木报表 — SQL数据源报表带参展示
  8. Centos Linux 开启端口 - 解决Centos发布服务外网访问不了的问题
  9. JEEWX 使用ngrok将本地Web服务映射到外网
  10. jeecg-framework-3.3.2-RELEASE 最新版本发布