HDU 5776 sum( 鸽巢定理简单题 )
2024-10-01 11:27:05
链接:传送门
题意:给一个长为 n 的串,问是否有子串的和是 m 的倍数。
思路:典型鸽巢定理的应用,但是这里 n,m 的大小关系是不确定的,如果 n >= m 根据定理可以很简单的判定是一定有解的,当 n < m 的时候就需要去具体寻找一下了,这里构造一个新串 Si = a1 + a2 + a3 + ...... + ai ,如果新串 Si % m = 0 自然就yes了,对于任意一个串 Si % m 的余数范围在 [ 0 , m - 1 ] ,如果出现两个余数相同的新串 S 则就能构成 ( Sj - Si ) % m = 0 ( i < j )
/*************************************************************************
> File Name: hdu5776.cpp
> Author: WArobot
> Blog: http://www.cnblogs.com/WArobot/
> Created Time: 2017年04月29日 星期六 23时00分52秒
************************************************************************/
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100010;
int a[maxn] , vis[maxn];
int t,n,m;
int S;
int main(){
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",a+i);
if(n>=m) printf("YES\n");
else{
memset(vis,0,sizeof(vis));
int ok = 0;
S = 0;
for(int i=1;i<=n;i++){
S = ( S + a[i] ) % m;
if(S==0) { ok = 1; break; }
if(vis[S]){ ok = 1; break; }
vis[S] = i;
}
if(ok) printf("YES\n");
else printf("NO\n");
}
}
return 0;
}
最新文章
- 转 listener.log文件过大导致oracle数据库连接非常慢
- swift 键盘属性与事件
- 如何用java获得字符串的ASCII值
- Angularjs 跳转页面并传递参数的方法总结
- IGS_学习笔记01_Integrated SOA Gateway介绍(案例)
- javascript正则表达式控制input只能输入数字
- Java并发——显示锁
- Eclipse中处理图片引包问题
- HTML5新增的属性和废除的属性
- 201521123121 《Java程序设计》第9周学习总结
- Kudu vs HBase
- 简单GC具体操作参数查看
- fortran语言调用fortran写的dll
- ajax工作原理及jsonp跨域详解
- Android View体系(七)从源码解析View的measure流程
- mysql 案例 ~ pt-archiver 归档工具的使用
- Linux系统下升级Python版本步骤(suse系统)
- Mysql版本java问题(com.mysql.cj.jdbc.Driver和com.mysql.jdbc.Driver)
- Coursera公开课笔记: 斯坦福大学机器学习第六课“逻辑回归(Logistic Regression)” 清晰讲解logistic-good!!!!!!
- 阻止form表单提交的问题
热门文章
- django rest-farme-work 的使用(3)
- django rest-farme-work 的使用(1)
- C#封装成DLL,并在C#中调用
- js实现本地的图片压缩上传预览
- BIRT报表Cannot open the connection for the driver:org.eclipse.birt.report.data.oda.jdbc.dbprofile
- opencv3.2+opencv_contrib+cmake
- HDU 4352
- HDU 4353
- 有关文档碎片(document fragment)的使用方法
- ORM进阶之Hibernate中对象的三大状态解析