hh的蓝桥杯每日一题--前缀和

1230. K倍区间 - AcWing题库

我一开始用暴力的方式做,果不其然超时了;

观察这个条件:

复制代码
(S[j] - S[i-1]) % k == 0

根据模运算的性质:

复制代码
如果 (a - b) % k == 0
那么 a % k == b % k

所以

复制代码
(S[j] - S[i-1]) % k == 0
⇔ S[j] % k == S[i-1] % k

这就是最重要的转化!我们把「区间和能被K整除」转化成了「两个前缀和模K同余」。

现在问题变成:

有多少对 (i-1, j) 满足 0 ≤ i-1 < j ≤ n 且 Si-1 % k == Sj % k

这等价于:

统计每个余数出现了多少次,然后从同余数中任选2个

也就是说,设余数 r 出现了 cntr 次,那么贡献是:C(cntr, 2) = cntr × (cntr - 1) / 2

cpp 复制代码
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=100010;
int n,k;
ll s[N];
ll cnt[N];

int main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		int x;
		cin>>x;
		s[i]=s[i-1]+x;
	}
	cnt[0]=1;
	for(int i=1;i<=n;i++)
	{
		cnt[(s[i]%k+k)%k]++;
	}
	
	ll res=0;
	for(int i=0;i<k;i++)
	{
		res+=cnt[i]*(cnt[i]-1)/2;
	}
	cout<<res<<endl;
	return 0; 
}
相关推荐
行走的陀螺仪11 小时前
【转型攻略】2026 年,后端 / 全栈工程师转 AI Agent 方向:能力地图、按周学习路线与面试要点
人工智能·面试·职场和发展
招聘背调实务专家杨宏15 小时前
技术岗位背调与技术面试如何分工
职场和发展
天真小巫21 小时前
2026.10.28总结
职场和发展
CoderYanger2 天前
Java EE 进阶:5. Spring IoC&DI(第一弹):Spring IoC
java·开发语言·spring boot·spring·面试·职场和发展·java-ee
海绵宝宝的月光宝盒2 天前
9-AutoCAD-移动、旋转、复制命令应用与案例实战
经验分享·笔记·职场和发展·课程设计·制造·学习方法·cad
傅科摆 _ py2 天前
回溯力扣复习
算法·leetcode·职场和发展
考研保研资料分享2 天前
985工科跨保上财应用统计:数学笔试、匿名面试与机试复盘
面试·职场和发展
杨逢昌工厂6S管理3 天前
126-杨逢昌6S三环体系:越做越乱的现场熵增机理与基准化治理——一线现场诊断笔记
经验分享·笔记·职场和发展·学习方法
海绵宝宝的月光宝盒3 天前
7-AutoCAD-参考线、多行文字、填充命令应用
经验分享·笔记·学习·职场和发展·课程设计·制造·cad
GG.WinGel3 天前
三元组中心问题
java·数据结构·算法·青少年编程·蓝桥杯