zoukankan      html  css  js  c++  java
  • [同余][前缀和]K倍区间

    若一段连续子序列[l, r]和为k的倍数

    则必定有 sum[r] - sum[l - 1] % k == 0

    由同余定理 sum[r] % k == sum[l - 1] % k

    由输入数据顺序则必定有已输入数据均在当前数据之前

    则可用brr数组记录当前数之前的所有模数 得解

    typedef long long ll;
    
    const int MAXN = 1e6 + 10;
    
    ll arr[MAXN] = {0};
    ll brr[MAXN] = {0};
    
    int main()
    {
        //ios::sync_with_stdio(false);
        //cin.tie(0);     cout.tie(0);
        //freopen("D://test.in", "r", stdin);
        //freopen("D://test.out", "w", stdout);
        
        int n, m;
    
        ll ans = 0;
    
        cin >> n >> m;
    
        for(int i = 1, t; i <= n; i++)
            cin >> arr[i], arr[i] += arr[i - 1], ans += brr[arr[i] % m]++;
    
        ans += brr[0];
    
        cout<<ans<<'
    ';
    
        return 0;
    }
  • 相关阅读:
    Python 基础
    Python 基础
    Python 基础
    Python 基础
    Python 基础
    Python 基础
    Python 基础
    Python 基础
    Python 基础
    Python 基础
  • 原文地址:https://www.cnblogs.com/zeolim/p/12270402.html
Copyright © 2011-2022 走看看