lanqiao OJ k倍区间

简介: lanqiao OJ k倍区间

用户登录

感觉需要做一些杂题。

k倍区间,我们要先求数组的前缀和,这样才能对区间进行操作,我们用前缀和的余数来记录每一个余数的数量,当出现这个余数的时候,我们当前的前缀和减去前面的任意一个余数相同的前缀和,都能构成新的复合条件的区间;

#include<iostream>
#include<cstring>
#include<algorithm>
 
using namespace std ;
typedef long long LL ;
const int N = 1e5 +10 ;
LL a[N] ;
LL n ; LL k ;
LL ans ;
LL sum[N] ;//用于记录各个余数的的前缀和的数量
int main(){
  cin >> n >> k ;
  sum[0] = 1 ;
  for(int i = 1 ; i <= n ; i ++){
    cin >> a[i] ;
    a[i] += a[i-1] ;//自身求前缀和
    ans += sum[a[i]%k] ;//返回值加上当前,前面的余数相同的数量
    sum[a[i]%k] ++ ; //再将当前这个余数为a[i]%k的记上数
  }
  cout << ans << endl ; 
} 
目录
相关文章
|
3天前
lanqiao OJ 3513 岛屿个数(2023省赛)
lanqiao OJ 3513 岛屿个数(2023省赛)
9 2
|
2天前
|
人工智能 Java BI
lanqiao OJ 111 区间位移
lanqiao OJ 111 区间位移
7 0
|
1天前
lanqiao OJ 246 矩阵计数
lanqiao OJ 246 矩阵计数
5 0
|
4月前
|
算法 索引
【洛谷 P1923】【深基9.例4】求第 k 小的数 题解(快速排序)
该题目要求输入一组不超过5000000个奇数个整数,并找出其中第k小的数,不使用`nth_element`函数,而是通过实现快速排序来解决。样例输入为5个数1, 4, 3, 2, 5,k=1,输出第1小的数即最小值2。代码中定义了快速排序函数`quickSort`和划分函数`partition`,并使用`read`函数读取输入。在主函数中对数组进行排序后输出第k个元素。
31 0
|
5月前
|
人工智能 算法 Java
K倍区间(蓝桥杯每日一题)
K倍区间(蓝桥杯每日一题)
52 0
|
人工智能
蓝桥 k倍区间 (前缀和)
蓝桥 k倍区间 (前缀和)
|
人工智能
蓝桥杯:k倍区间
蓝桥杯:k倍区间
55 0
|
人工智能 C++ Python
蓝桥杯练习题八 - k倍区间(c++)(一)
蓝桥杯练习题八 - k倍区间(c++)
89 0
|
存储 C++
蓝桥杯练习题八 - k倍区间(c++)(二)
蓝桥杯练习题八 - k倍区间(c++)
129 0