所谓鸽巢原理,即n+1只鸽子,只有n个巢,则至少有一鸽巢有两只鸽子。
鸽巢原理理解起来并不困难,有些题目需要转换一下。
POJ3770
题意:有n个数,可能相同也可能不相同,从中取出一些数,使它们的和能被c整除(c<=n),任意输出一种方案。
解:构造序列si,使得
s1 = a1
s2 = a1 + a2
s3 = a1 + a2 + a3
...
sn = a1 + a2 + ... + an
这样,有两种可能:
(1) 若其中有一项si是c的倍数,则即找到解;
(2) 否则,si=ri (mod c),取值只可能在[1,c-1]这c-1个数,然而有n个数,且c<=n,则必然存在两个数si和sj对c取模相等。首先肯定了原问题的答案肯定存在。若sj>si,则序列ai+1,...aj即为原问题的一种方案。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int Max = 100005;
int a[Max];
int flag[Max];
int main()
{
int i;
int c,n;
while(true)
{
scanf("%d %d",&c,&n);
if(c==0&&n==0)
break;
memset(flag,0,sizeof(flag));
for(i = 1; i <= n; i++)
scanf("%d",&a[i]);
int rmd = 0;
int s=1,t=1;
for(i = 1; i <= n; i++)
{
rmd = (rmd + a[i])%c;
if(rmd==0)
{
s = 1;
t = i;
break;
}
else if(flag[rmd])
{
s = flag[rmd]+1;
t = i;
break;
}
else
flag[rmd] = i;
}
for(i = s; i <= t; i++)
{
printf("%d",i);
printf("%c",i==t?'\n':' ');
}
}
return 0;
}
分享到:
相关推荐
数学广角——鸽巢原理1PPT课件.pptx
重点介绍鸽巢原理的应用,在组合数学中鸽巢原理的定义及其主要应用
数学广角——鸽巢原理PPT学习教案.pptx
组合数学相关知识,包括容斥原理及其应用,鸽巢原理及其应用,
六年级下册数学人教版周测培优卷7 数学广角——鸽巢问题的应用能力检测卷(含答案).pdf
这个PPT的内容是组合数学的鸽巢原理。 可以用来学习等。 让你懂得鸽巢原理。
人教新课标小学数学六年级下册数学广角——鸽巢问题PPT学习教案.pptx
人教新课标小学数学六年级下册数学广角——鸽巢问题PPT教学课件.pptx
组合数学中鸽巢原理又称为抽屉原理,在此文章中包含了丰富的例子及详解
组合数学鸽巢原理PPT学习教案.pptx
人教版六年级数学下册鸽巢原理练习题及答案精选.doc
它是组合数学中一个重要的原理。抽屉原理的一般含义为:“如果每个抽屉代表一个集合,每一个苹果就可以代表一个元素,假如有n+1个元素放到n个集合中去,其中必定有一个集合里至少有两个元素。”
六年级数学《鸽巢原理》教学设计说明.doc
用java编译的鸽巢原理,里面有成功运行的源文件和关于鸽巢原理的文档。
本文为初学者提供了一个全面的学习指南,通过通俗易懂的语言和详细的代码注释,介绍了鸽巢原理及其在解决实际问题中的应用。文章以小学生可以理解的语言,从鸽巢原理的简介、应用、实战演练、数学证明和扩展等多个...
人教版数学六年级下册鸽巢原理-康淼.pdf
1.1 组合数学研究的对象 1.2 组合问题典型实例 1.2.1 分派问题 1. 2.2 染色问题 1.2.3 幻方问题 1.2.4 36军官问题 1.2.5 中国邮路问题 习 题 第二章 排列与组合 2.1 两个基本计数原理 2.2 无...
鸽巢原理,又称为抽屉原理,是组合数学中一个非常基础且重要的原理。它描述了一种简单的数学现象:当足够多的物体被放入有限数量的容器中时,至少有一个容器包含两个或更多的物体。这一原理在日常生活、科学研究以及...
六年级数学鸽巢原理说课稿.doc