题目连接

 抽屉原理:如果现在有3个苹果,放进2个抽屉,那么至少有一个抽屉里面会有两个苹果

抽屉原理的运用

现在假设有一个正整数序列a1,a2,a3,a4.....an,试证明我们一定能够找到一段连续的序列和,让这个和是n的倍数,该命题的证明就用到了抽屉原理

我们可以先构造一个序列si=a1+a2+...ai

然后分别对于si取模,如果其中有一个sk%n==0,那么a1+a2+...+ak就一定是n的倍数(该种情况得证)

下面是上一种情况的反面,即任何一个sk对于n的余数都不为0

对于这种情况,我们可以如下考虑,因为si%n!=0

那么si%n的范围必然在1——(n-1),所以原序列si就产生了n个范围在1——(n-1)的余数,于是抽屉原理就来了,n个数放进n-1个盒子里面,必然至少有两个余数会重复,那么这两个sk1,sk2之差必然是n的倍数,

而sk1-sk2是一段连续的序列,那么原命题就得到了证明了

实现代码如下

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int sum[],vis[];
int main()
{
int n,m,t,i,j,flag,a;
scanf("%d",&t);
while(t--)
{
memset(vis,,sizeof(vis));
memset(sum,,sizeof(sum));
vis[]=;flag=;
scanf("%d%d",&n,&m);
for(i=;i<=n;i++)
{
scanf("%d",&a);
sum[i]+=(sum[i-]+a)%m;
if(vis[sum[i]]){flag=;}
else vis[sum[i]]=;
}
if(flag)
printf("YES\n");
else printf("NO\n");
}
return ;
}

最新文章

  1. Bash:-set设置位置变量结合while和shift使用
  2. Matlab验证公式取值范围
  3. RosettaNet
  4. 从零单排Linux – 2 – 目录权限
  5. MongoDB基本命令随便敲敲
  6. 【canvas系列】用canvas实现一个colorpicker
  7. 【Python】 python对象的文件化 pickle
  8. Day1 《机器学习》第一章学习笔记
  9. python 函数enumerate(x,y)的用法
  10. C# Finalize和Dispose的区别
  11. 团队合作one
  12. Kubernetes 1.3.1 快速单机部署
  13. day11_python_1124
  14. oracle 变量练习
  15. JDBC 事务(一) 隔离级别
  16. 科普文:从人人网看网络科学(Network Science)的X个经典问题
  17. BZOJ4560 [JLoi2016]字符串覆盖
  18. Json化数据-调微信接口
  19. Hadoop运维记录系列
  20. TeeChart for .NET常用属性总结

热门文章

  1. AspectJ学习笔记2-Eclipse中AspectJ插件AJDT的正确安装方法
  2. EMMC电路设计
  3. J2EE——开发环境搭建
  4. git系列1
  5. excel表格定义导入到powerdesigner脚本
  6. Frege-基于JVM的类Haskell纯函数式编程语言
  7. MySQL CREATE TRIGGER (1)
  8. 自定义下拉刷新控件-CBStoreHouseRefreshControl
  9. EasyPlayerPro windows播放器在播放RTMP视频显示重复异常问题解决
  10. haproxy + keepalived 实现web 双主模型的高可用负载均衡