区间问题笔记

1、k倍区间

#include <iostream>
#include<cmath>
#include<vector>
#include<algorithm>
#include<stack>
using namespace std;

long long sum[100005];  // 前缀和数组
int cnt[100005];        // 记录sum[i]除k得到的余数的个数
int ans;

int main()
{
    int n, k;
    cin >> n >> k;
    cnt[0] = 1;         // 特殊情况,余数为0直接自成一个k倍区间
    for (int i = 1; i <= n; i++) {
        int tmp;
        cin >> tmp;
        sum[i] = sum[i - 1] + tmp;

        // 若sum[i] % k = a, 则cnt[a]表示sum[j] % k = a(j < i)的个数
        // 若sum[i] % k = sum[j] % k = a(i > j),则sum[i] - sum[j]为k的倍数,即[j+1,i]为k倍区间
        // 所以cnt[a]有多少个,则i就可以和前面多少个j形成k倍区间
        ans += cnt[sum[i] % k];
        cnt[sum[i] % k]++;
    }
    cout << ans;
    return 0;
}

相关推荐

  1. 笔记---贪心---区间问题

    2024-01-20 13:00:02       48 阅读
  2. 贪心-区间问题

    2024-01-20 13:00:02       32 阅读
  3. 【重点】【区间问题】56.合并区间

    2024-01-20 13:00:02       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-20 13:00:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-20 13:00:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-20 13:00:02       87 阅读
  4. Python语言-面向对象

    2024-01-20 13:00:02       96 阅读

热门阅读

  1. 洛谷 P1622 释放囚犯【区间dp】

    2024-01-20 13:00:02       62 阅读
  2. 【卡梅德生物】如何制备纳米抗体?

    2024-01-20 13:00:02       45 阅读
  3. Git 的基本概念、使用方式及常用命令

    2024-01-20 13:00:02       61 阅读
  4. C++:通过ofstream写入二进制文件内容

    2024-01-20 13:00:02       60 阅读
  5. uniapp技术积累

    2024-01-20 13:00:02       50 阅读
  6. MySQL经典面试题

    2024-01-20 13:00:02       46 阅读