zoukankan      html  css  js  c++  java
  • Atcoder--Candy Distribution II--前缀和+map

    题目描述

    There are N boxes arranged in a row from left to right. The i-th box from the left contains Ai candies.
    You will take out the candies from some consecutive boxes and distribute them evenly to M children.
    Such being the case, find the number of the pairs (l,r) that satisfy the following:
    l and r are both integers and satisfy 1≤l≤r≤N.Al+Al+1+…+Ar is a multiple of M.
    Constraints
    ·All values in input are integers.
    ·1≤N≤105
    ·2≤M≤109
    ·1≤Ai≤109

    输入

    Input is given from Standard Input in the following format:

    N M
    A1 A2 … AN

    输出

    Print the number of the pairs (l,r) that satisfy the conditions.
    Note that the number may not fit into a 32-bit integer type.

    样例输入

    3 2
    4 1 5
    

    样例输出

    3

    提示

    The sum Al+Al+1+…+Ar for each pair (l,r) is as follows:
    ·Sum for (1,1): 4
    ·Sum for (1,2): 5
    ·Sum for (1,3): 10
    ·Sum for (2,2): 1
    ·Sum for (2,3): 6
    ·Sum for (3,3): 5
    Among these, three are multiples of 2.

    题意:
    求能够整除m的区间的个数
    开始用了一遍前缀和,再用两个for循环遍历,然后T了
    再看模数的取值范围,开不了数组,于是就用map来解决

    #pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math")
    #pragma GCC optimize("Ofast")
    #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
    #pragma comment(linker, "/stack:200000000")
    #pragma GCC optimize (2)
    #pragma G++ optimize (2)
    #include <bits/stdc++.h>
    #include <algorithm>
    #include <map>
    #include <queue>
    #include <set>
    #include <stack>
    #include <string>
    #include <vector>
    using namespace std;
    #define wuyt main
    typedef long long ll;
    #define HEAP(...) priority_queue<__VA_ARGS__ >
    #define heap(...) priority_queue<__VA_ARGS__,vector<__VA_ARGS__ >,greater<__VA_ARGS__ > >
    template<class T> inline T min(T &x,const T &y){return x>y?y:x;}
    template<class T> inline T max(T &x,const T &y){return x<y?y:x;}
    //#define getchar()(p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++)
    //char buf[(1 << 21) + 1], *p1 = buf, *p2 = buf;
    ll read(){ll c = getchar(),Nig = 1,x = 0;while(!isdigit(c) && c!='-')c = getchar();
    if(c == '-')Nig = -1,c = getchar();
    while(isdigit(c))x = ((x<<1) + (x<<3)) + (c^'0'),c = getchar();
    return Nig*x;}
    #define read read()
    const ll inf = 1e15;
    const int maxn = 2e5 + 7;
    const int mod = 1e9 + 7;
    #define start int wuyt()
    #define end return 0
    #define N 1005
    ///int num[maxn];
    ///int sum[maxn];
    map<ll,ll>mp;
    int n;
    ll m;
    start{
        n=read,m=read;
        ll num,sum = 0,ans = 0;
            mp.clear();
            mp[0]++;
            for(int i=1; i<=n;i++) {
                num=read;
                sum+=num;
                sum%=m;
                ans+=mp[sum];
                mp[sum]++;
            }
            printf("%lld
    ",ans);
        end;
    }
    
  • 相关阅读:
    JavaScript测试工具chai
    gradle初始仓库依赖(含junit)
    汇编和中断
    oracle-12c-ee安装
    pickle
    Python (zip, lambda, map, shallow copy, deepcopy)
    豆瓣源下载tensorflow
    Linux上XRDP可作为WIN的远程连接
    VNC连接远程Linux——废弃电脑作为运算机器
    MACOS 运行Keras报错
  • 原文地址:https://www.cnblogs.com/PushyTao/p/13144202.html
Copyright © 2011-2022 走看看