标签:
题意 :给你 N 个数, 和 mod M;
求 N 个数中 啪去 连续K 个数后 mod M 不变 的 K 的 MAx;
DP :
其实就是找连续K个数的和为M的倍数
吧前缀和 mod M 记录下来,计算出现的间距最长就有了
#include<iostream> #include<cstring> #include<algorithm> typedef long long ll; using namespace std; const int maxn = 100000 + 7; int Num[maxn]; int HASH[maxn]; int main() { Num[0] = 0; int N, M; while(scanf("%d %d",&N,&M) != EOF) { int Max = 0; memset(HASH,-1,sizeof(HASH)); for(int i = 1; i <= N; ++i) scanf("%d",&Num[i]); HASH[0] = 0; for(int i = 1; i <= N; ++i) { Num[i] += Num[i-1]; Num[i] %= M; if(Num[i] < 0) Num[i] = (Num[i] + M) % M; if(HASH[Num[i]] != -1) { Max = max(Max, i - HASH[Num[i]]); } else { HASH[Num[i]] = i; } } //if(Num[N] == 0) Max = N; printf("%d\n",Max); } return 0; }
标签:
原文地址:http://www.cnblogs.com/aoxuets/p/4748892.html