P3131 [USACO16JAN]Subsequences Summing to Sevens S

sum统计余数。如果[l,r]能被7整除,那么sum[r]和sum[l-1]的余数一定相同,然后找每个余数最前的位置和最后的位置,枚举余数统计max。

注意sum[0]=0的边界。

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=50005;
int n;
int a[N],sum[N];
int last[N],first[N];
int maxl;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1;i<=n;i++) sum[i]=(sum[i-1]+a[i])%7;
	for(int i=0;i<=n;i++){
		last[sum[i]]=i;
	}
	for(int i=n;i>=0;i--){
		first[sum[i]]=i;
	}
	for(int i=0;i<=6;i++){
		maxl=max(maxl,last[i]-first[i]);
	}
	printf("%d",maxl);
	return 0;
}
posted @ 2021-11-18 17:42  dfydn  阅读(58)  评论(0编辑  收藏  举报