bzoj 4511: [Usaco2016 Jan]Subsequences Summing to Sevens

来源:互联网 发布:sha1算法的c语言实现 编辑:程序博客网 时间:2024/05/29 18:46

→题目链接←


维护一个前缀和,但是它维护的是前缀和%7

然后如果存在sum[i]==sum[j],显然的是这中间的一段是可以被7整除的

所以枚举余数,每次找到左右端点,取一个max就好


代码:

#include<iostream>#include<cstdio>#include<queue>#include<vector>using namespace std;int n;int sum[50050];bool f[7];int ans=0;int main(){scanf("%d",&n);int x;for(int i=1; i<=n; i++){scanf("%d",&x);sum[i]=(sum[i-1]+x)%7;f[sum[i]]=true;}if(n==1 && x%7==0){puts("1");return 0;}for(int i=0; i<7; i++){if(f[i]==false)continue;int l,r;for(l=1; l<=n; l++)if(sum[l]==i)break;for(r=n; r>=1; r--)if(sum[r]==i)break;ans=max(ans,r-l);}printf("%d\n",ans);return 0;} 


原创粉丝点击