题意:给好多数,看有多少个子串的和能被某数整除。
暴搜会超时,是一道技巧题
解题代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <stack>
#include <queue>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
#define MAX 1000010
#define eps 1e-8
#define LL __int64
#define N 360
#define Pi 3.1415926535
int a[MAX];
LL ans;
int main()
{
int i ,j ,k ,t ,n ,d ;
scanf("%d",&t);
while(t--){
scanf("%d%d",&d,&n);
memset(a,0,sizeof(a));
int num = 0;
ans = 0;
while(n--){
scanf("%d",&k);
num = (num+k)%d;
if(num == 0)
{
a[num]++;
}
ans += a[num];
if(num != 0)
{
a[num]++;
}
}
printf("%I64d\n",ans);
}
return 0;
}