第四题
这道题我懵逼了
最简单的题目还是不会做
这道题目你合并开始的时候,就是前缀和取模一样的时候,代表着这里面有数字可以合并为m,但是一旦合并了就是这个不可以在进行合并了,所以前缀和需要更改
#include<iostream>
//#include<string>
#include<cstring>
using namespace std;
const int N = 500010;
int stackarr[N];
int main()
{
ios::sync_with_stdio(false);
cout.tie(0);
cin.tie(0);
int t;
cin >> t;
long long arr[N],sum[N];
while (t--)
{
memset(sum, 0, sizeof(sum));
memset(arr, 0, sizeof(arr));
int n, m,tot,ans = 0;
cin >> n >> m;
for (size_t i = 1; i <= n; i++)
{
cin >> arr[i];
sum[i] = arr[i] + sum[i - 1];
}
tot = 1;
stackarr[0] = 0;
for (int i = 1; i <= n; i++)
{
stackarr[tot] = sum[i] % m;
tot++;
for (int j = 0; j < tot - 1; j++)
{
if (stackarr[tot - 1] == stackarr[j])
{
ans++;
stackarr[0] = stackarr[tot - 1];
tot = 1;
break;
}
}
}
cout << ans << endl;
}
}