C++课后习题训练记录Day165

1.练习项目 :

题目描述

给定一个长度为 N 的数列,A1,A2,⋯AN,如果其中一段连续的子序列 Ai,Ai+1,⋯Aj ( i≤j ) 之和是 K 的倍数,我们就称这个区间 [i,j] 是 K 倍区间。

你能求出数列中总共有多少个 K 倍区间吗?

输入描述

第一行包含两个整数 N 和 K( 1≤N,K≤105 )。

以下 N 行每行包含一个整数 Ai​ ( 1≤Ai≤105 )

输出描述

输出一个整数,代表 K 倍区间的数目。

2.选择课程

在蓝桥云课中选择题库,选择题号97并开始练习。

3.开始练习

(1)源码 :

#include<bits/stdc++.h>

using namespace std;

using ll=long long;

const int N=1e5+10;

ll a[N];

int cnt[N];

int main()

{

ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

int n,k;cin>>n>>k;

cnt[0]=1;

ll res=0;

for(int i=1;i<=n;i++){

cin>>a[i];

a[i]+=a[i-1];

res+=cnt[a[i]%k];

cnt[a[i]%k]++;

}

cout<<res<<'\n';

return 0;

}

(2)检验结果

对此代码进行检验,检验后无报错,提交此代码,判题结果为正确100分。

(3)练习心得:

注意每段代码末尾的分号是否存在 ,如不存在则需即使补充;输入法是否切换为英语模式;语法是否错误。