这道题当时拿着一看,想都没想就上了前缀和,但看了数据范围,还是必挂的节奏。
其实,应对每个前缀和取模,再桶排序一次。
还有 有负数
#include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <algorithm> using namespace std; const int maxn = 500005; const int maxm = 500005; int m,n; int c[maxn]; int d[maxm]; long long ans; int main() { //freopen("sequence.in","r",stdin); //freopen("sequence.out","w",stdout); scanf("%d%d",&n,&m); for (int i = 1; i <= n; ++i) { scanf("%d",&c[i]); c[i] %= m; if (c[i]<0) c[i] += m; (c[i] += c[i-1]) %= m; ans += d[c[i]]; ++ d[c[i]]; } ans += d[0]; printf("%I64d\n", ans); return 0; }
20140710 sequence,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/woshizyj/p/3836463.html