HDU 5776 sum
2016-08-02 09:43
369 查看
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5776
题意:求是否有一段区间的连续和%m==0。
我们可以看到,n的范围是100000,m是5000。那么,n个数字就会产生n个前缀和,而且n个前缀和产生在[0, m)的区间内。
假设产生了两个相同的前缀和的情况:
假设为(a[1]+a[2]+……a[L])%m==(a[1]+a[2]+……a[R])%m。
那么就可以得出a[L+1]+a[L+2]+……a[R]%m==0。
如果n==m,如果每个前缀和都不相等,那么肯定会有%m==0的情况,也就是YES,否则,产生两个相同的前缀和,也是YES。而且,当n>m的时候,必定会产生两个前缀和%m的值相等,由此可以推出:
在n>=m的时候,一定是YES。
那么剩下的就是n < m的情况了,求一个前缀和,就算是n^2枚举也没有问题了。
又或者是定义一个访问数组,如果某两个前缀和产生了相同的余数,就是YES。
题意:求是否有一段区间的连续和%m==0。
我们可以看到,n的范围是100000,m是5000。那么,n个数字就会产生n个前缀和,而且n个前缀和产生在[0, m)的区间内。
假设产生了两个相同的前缀和的情况:
假设为(a[1]+a[2]+……a[L])%m==(a[1]+a[2]+……a[R])%m。
那么就可以得出a[L+1]+a[L+2]+……a[R]%m==0。
如果n==m,如果每个前缀和都不相等,那么肯定会有%m==0的情况,也就是YES,否则,产生两个相同的前缀和,也是YES。而且,当n>m的时候,必定会产生两个前缀和%m的值相等,由此可以推出:
在n>=m的时候,一定是YES。
那么剩下的就是n < m的情况了,求一个前缀和,就算是n^2枚举也没有问题了。
又或者是定义一个访问数组,如果某两个前缀和产生了相同的余数,就是YES。
#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <cstdlib> #include <cctype> #include <string> #include <iostream> #include <vector> #include <map> #include <set> #include <queue> #include <ctime> using namespace std; typedef long long ll; typedef pair<int, int> pii; #define pb push_back #define mp make_pair #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define calm (l+r)>>1 const int INF = 2139062143; const int maxn=100010; int n,m,sum[maxn]; bool check(){ for(int i=1;i<=n;i++){ for(int j=i;j<=n;j++){ if((sum[j]-sum[i-1])%m==0)return true; } } return false; } int main(){ //freopen("D://input.txt","r",stdin); int T;scanf("%d",&T); while(T--){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ int x;scanf("%d",&x); sum[i]=sum[i-1]+x; } if(n>=m)printf("YES\n"); else{ if(check())printf("YES\n"); else printf("NO\n"); } } return 0; }
相关文章推荐
- HDU 5776 sum
- HDU - 5776 sum 前缀数组
- hdu_5776_sum(前缀和维护)
- HDU 5776 BestCoder Round #85 sum (数学)
- HDU 5776 sum(思维题+前缀和)
- HDU 5776/BC 85A sum
- hdu 5776 Sum【前缀和相关】
- hdu 5776 sum(BestCoder Round #85——思维题)
- hdu 5776 sum 前缀和
- HDU 5776 (sum 前缀和)
- hdu 5776 sum (鸽巢原理)
- HDU 5776 SUM (鸽巢原理 / 抽屉原理)
- HDU 5776 sum
- HDU 5776 sum
- HDU 5776 sum (前缀和)
- hdu 5776 sum(前缀和取模)
- hdu 5776 sum
- 【HDU】5776 - sum(数论 & 思维)
- HDU 5776 sum(抽屉原理)
- HDU 5776 sum (思维题)