poj 3844

来源:互联网 发布:linux tcpdump 用法 编辑:程序博客网 时间:2024/06/06 04:15

题意:给好多数,看有多少个子串的和能被某数整除。

暴搜会超时,是一道技巧题

解题代码:

#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.1415926535int 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;}


0 0