AcWing 265446. 前缀和的妙用2
原题链接
简单
作者:
Dessa
,
2024-10-15 21:31:19
,
所有人可见
,
阅读 1
如果前缀和数组i,j两个索引处的%k的值是相同的,那么他们之间的差值一定是k的倍数,所以初始值要设p[0]=1,例如第一个数就是k,就可以直接切割了
const int N = 200010;
int a[N];
int b[N];
int c[N];
void solve()
{
int n, k;
cin >> n >> k;
map<int, int> p;
for (int i = 1; i <= n; i++) cin >> a[i], b[i] = b[i - 1] + a[i], c[i] = b[i] % k;
int ans = 0;
p[0] = 1;
int ok = 0;
for (int i = 1; i <= n; i++)
{
if (p[c[i]] != 0)
{
ans++;
p.clear();
p[c[i]] = 1;
}
else p[c[i]]++;
}
cout << ans << '\n';
}