K倍区间(蓝桥杯c++)

#include<bits/stdc++.h>
using namespace std;
long long a[100010],s[100010];
int main()
{
int n,k;
cin>>n>>k;
long long ans=0;
a[0]=1; //若余0则直接符合条件,因此初始化为1
for(int i=1;i<=n;i++){
int x;cin>>x;
s[i]=(s[i-1]+x)%k;
ans+=a[s[i]]; //同样余数的点有多少个即加上多少
//例如当i=3时%k==1,i=4时%k也等于1,则a[4]-a[3]=k;
a[s[i]]++; //记录相同余数的点
}
cout<<ans;
return 0;
}
本文详细介绍了如何解决蓝桥杯竞赛中的一道C++题目,涉及余数运算和动态规划。代码实现了一个算法,通过输入整数序列n和k,计算每个位置上数模k的余数出现的次数,最后输出所有可能的K倍区间的数量。该问题主要考察编程思维和数值处理能力。
&spm=1001.2101.3001.5002&articleId=127438409&d=1&t=3&u=540845e0c180443d9eb6b12519edce21)
2282

被折叠的 条评论
为什么被折叠?



