题意
传送门 P3131 [USACO16JAN]Subsequences Summing to Sevens
题解
求区间和模 7 7 7 为 0 0 0 的最大区间长度。计算前缀和,记录模 7 7 7 的余数在前缀和中第一次与最后一次出现的次数,此时满足前缀之差代表的区间和模 7 7 7 等于 0 0 0 且对于此余数而言区间长度最大。
#include <bits/stdc++.h>
using namespace std;
#define mod 7
#define maxn 50005
int N, fst[mod], lst[mod], A[maxn], sum[maxn];
int main()
{
scanf("%d", &N);
for (int i = 0; i < N; ++i)
scanf("%d", A + i);
memset(fst, -1, sizeof(fst));
for (int i = 0; i < N; ++i)
{
int t = sum[i + 1] = (sum[i] + A[i]) % mod;
if (fst[t] == -1)
fst[t] = i;
lst[t] = i;
}
int res = 0;
for (int i = 0; i < mod; ++i)
res = max(res, lst[i] - fst[i]);
printf("%d\n", res);
return 0;
}