HDU 5776 sum
2016-07-31 15:07
232 查看
http://acm.hdu.edu.cn/showproblem.php?pid=5776
预处理前缀和,一旦有两个数模m的值相同,说明中间一部分连续子列可以组成m的倍数。 另外,利用抽屉原理,我们可以得到,一旦n大于等于m,答案一定是YES 复杂度 O(n)
只要读入数据后,保留前项取余的结果就好了。如果n大,m小,也可以直接开m大的bool来判断是否有同模或模为0的连续子串。如果m大,就可以保存模,在尺取m,判断有没有单独成立的就好了。
预处理前缀和,一旦有两个数模m的值相同,说明中间一部分连续子列可以组成m的倍数。 另外,利用抽屉原理,我们可以得到,一旦n大于等于m,答案一定是YES 复杂度 O(n)
只要读入数据后,保留前项取余的结果就好了。如果n大,m小,也可以直接开m大的bool来判断是否有同模或模为0的连续子串。如果m大,就可以保存模,在尺取m,判断有没有单独成立的就好了。
#include <algorithm> #include <iostream> #include <cstring> #include <cstdio> using namespace std; bool mod[5005]; int main() { int T; scanf("%d",&T); while(T--) { int n,m; bool flag=false; scanf("%d%d",&n,&m); memset(mod, false, sizeof(mod)); for(int i=0,a,b,sum=0; i<n; i++) { scanf("%d",&a); b=a%m; sum+=b; sum%=m; if(mod[sum]) { flag=true; } mod[sum]=true; } if(flag||mod[0]) { printf("YES\n"); } else { printf("NO\n"); } } return 0; }
相关文章推荐
- 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 BestCoder Round #85 sum (数学)
- hdu 5776 sum(BestCoder Round #85——思维题)
- HDU 5776 sum
- HDU 5776 sum(思维题+前缀和)
- HDU 5776/BC 85A sum
- hdu 5776 Sum【前缀和相关】
- hdu 5776 sum (鸽巢原理)
- HDU 5776 SUM (鸽巢原理 / 抽屉原理)
- hdu 5776 sum 前缀和
- HDU 5776 (sum 前缀和)