中学就听说过抽屉原理,可惜一直没机会见识,现在这题有鸽笼原理的结论,但其实知不知道鸽笼原理都可以做

先总结一下鸽笼原理:

有n+1件或n+1件以上的物品要放到n个抽屉中,那么至少有一个抽屉里有两个或两个以上物品。

如果你知道这个结论:
a1,a2,a3...am是正整数序列,至少存在整数k和r,1<=k<r<=m,使得ak+a(k+1)+...+a(r)是m的倍数。

证明比较简单:

Sk表示前k个数之和,

(1)若Sk%m==0,前k个数就是m的倍数

(2)如果Sn与St模m同余,那么从t+1到n这些数之和模m等于0.

即使你不知道这个结论,DP厉害的话,应该能想到用 前n项的和 去思考的思想

有这个结论知必有解。

贴代码之前,在总结一下鸽笼原理的结论:
推论1:m只鸽子,n个笼,则至少有一个鸽笼里有不少于[(m-1)/n]+1只鸽子。

推论2:若取n*(m-1)+1个球放进n个盒子,则至少有1个盒子有m个球。

推论3:若m1,m2,...mn是n个正整数,而且(m1+m2+...+mn)/n>r-1

则m1,m2,...mn中至少有一个数不小于r

直接贴代码吧:没啥解释的,700多MS,当时judge的时候我还害怕TLE

#include<cstdio>
#include<cstring>
using namespace std;
#define N 100002 int sum[N],pos[N]; int main()
{ int c,n,i,r,t,j; while(scanf("%d%d",&c,&n),c+n)
{
memset(pos,-1,sizeof(pos));
bool flag=false; scanf("%d",&sum[0]);
sum[0]%=c;
pos[sum[0]]=0;
if(sum[0]==0){printf("1\n");flag=1;} for(i=1;i<n;i++)
{
scanf("%d",&sum[i]);
if(flag)continue;
sum[i]%=c;
sum[i]+=sum[i-1];
sum[i]%=c;
if(sum[i]==0)
{
for(j=0;j<i;j++)
printf("%d ",j+1);
printf("%d\n",i+1);
flag=1;
continue;
}
if(pos[sum[i]]==-1)pos[sum[i]]=i;
else
{
for(j=pos[sum[i]]+1;j<=i;j++)
if(j!=i)printf("%d ",j+1);
else printf("%d\n",i+1);
flag=1;
}
} } return 0;
}

poj 3370 鸽笼原理知识小结的更多相关文章

  1. poj 2356鸽笼原理水题

    关于鸽笼原理的知识看我写的另一篇博客 http://blog.csdn.net/u011026968/article/details/11564841 (需要说明的是,我写的代码在有答案时就输出结果了 ...

  2. POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理

    Halloween treats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7644   Accepted: 2798 ...

  3. Android app开发知识小结

    Android知识小结 这是一个知识的总结,所以没有详解的讲解. 一.分辨率Android中dp长度.sp字体使用.px像素.in英寸.pt英寸1/72.mm毫米 了解dp首先要知道density,d ...

  4. POJ_1065_Wooden_Sticks_(动态规划,LIS+鸽笼原理)

    描述 http://poj.org/problem?id=1065 木棍有重量 w 和长度 l 两种属性,要使 l 和 w 同时单调不降,否则切割机器就要停一次,问最少停多少次(开始时停一次). Wo ...

  5. HTTPS知识小结

    HTTPS知识小结 背景1:TCP握手 internet上的两台机器A,B要建立起HTTP连接了,在这之前要先建立TCP连接,情景大概是这样子的: A:你好,我跟你建立一个TCP好吗? B:好啊. A ...

  6. HDU 5762 Teacher Bo (鸽笼原理) 2016杭电多校联合第三场

    题目:传送门. 题意:平面上有n个点,问是否存在四个点 (A,B,C,D)(A<B,C<D,A≠CorB≠D)使得AB的横纵坐标差的绝对值的和等于CD的横纵坐标差的绝对值的和,n<1 ...

  7. Gym 100851G Generators (vector+鸽笼原理)

    Problem G. Generators Input file: generators.in Output file: generators.outLittle Roman is studying li ...

  8. C/C++ 位域知识小结

    C/C++ 位域知识小结 几篇较全面的位域相关的文章: http://www.uplook.cn/blog/9/93362/ C/C++位域(Bit-fields)之我见 C中的位域与大小端问题 内存 ...

  9. JAVA 变量 数据类型 运算符 知识小结

    ---------------------------------------------------> JAVA 变量 数据类型 运算符 知识小结 <------------------ ...

随机推荐

  1. Libev学习笔记2

    这一节根据官方文档给出的简单示例,深入代码内部,了解其实现机制.示例代码如下: int main (void) { struct ev_loop *loop = EV_DEFAULT; ev_io_i ...

  2. 讲讲金融业务(一)--自助结算终端POS

    之前在群里和大家聊天的时候,发现好多人对银行业务比較感兴趣,或许是由于大家对银行不了解,以为非常神奇的样子.全部,从这周開始我打算把我肚子里的墨水慢慢地倒出来,和大家分享分享.   在技术还不发达的时 ...

  3. c#关于EXCEL导出数据库的做法

    using System;using System.Diagnostics;using System.Collections;using System.Data;using System.Web;us ...

  4. 专门针对初学者的Node.js教程

    转载原文:http://www.csdn.net/article/2013-08-28/2816731-absolute-beginners-guide-to-nodejs Node.js的教程并不缺 ...

  5. Arduino M0 的一个坑(2015-12-25)

    前几天收到 Arduino M0,试各项功能都正常,可就是串口监视器/串口助手不能显示程序里打印的输出,好生奇怪,各种换波特率各种PC串口程序换着试,资料不多,官方资料也只说到 Serial1 用于 ...

  6. MySql 小问题集合

    - 使用MySql通过SpringFramework来自动建表, 服务器用的是Tomcat, 在server.xml和context.xml中均正确配置了jdbc datasource. 编译通过, ...

  7. 转载纯真ip库

    http://blog.csdn.net/clin003/archive/2007/08/14/1743157.aspx 利用 QQWry.Dat 实现 IP 地址高效检索(PHP) 根据 LumaQ ...

  8. JS拖动DIV布局

    方法一: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  9. [LeetCode]题解(python):026-Remove Duplicates from Sorted Array

    题目来源: https://leetcode.com/problems/remove-duplicates-from-sorted-array/ 题意分析: 给定一个排好序的数组,去除重复的数,返回新 ...

  10. known good die( KGD) /确认好裸芯片,合格芯片

    英文:known good die( KGD) / 中文:确认好裸芯片,合格芯片 完工的晶圆上有许多晶片存在,其单一品质有好有坏,经过老化试验后,其确知电性能良好的晶片即称为己知好晶片.不过,已知好晶 ...