蓝桥杯备战22.k倍区间——前缀和

目录

题目

分析

暴力求解

优化思路

AC代码


题目链接:

P8649 [蓝桥杯 2017 省 B] k 倍区间 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目

分析

很明显这题是一道前缀和的题

暴力求解

只得了28分

cpp 复制代码
#include<iostream>
using namespace std;
const int N = 2e5+10,M=1e3+10;
int a[N],pre[N];
int main()
{
	int n,k;cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		pre[i]=pre[i-1]+a[i];	
	}
	int ans = 0;
	for(int i=0;i<n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			if((pre[j]-pre[i])%k==0)ans++;
		}
	}
	cout<<ans;
	return 0;
}

优化思路

同余定理,当他们的模数相同时候,做差的模为0

AC代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5+10,M=1e3+10;
int a[N],pre[N];
signed main()
{
	map<int,int>mp;
	int n,k;cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		pre[i]=(pre[i-1]+a[i])%k;
		mp[pre[i]]++;	
	}
	int ans = 0;
	for(auto i:mp)
	{
		if(i.first==0)
		{
			ans+=i.second*(i.second+1)/2;
		}
		else
		{
			ans+=i.second*(i.second-1)/2;
		}
	}
	cout<<ans;
	return 0;
}
相关推荐
大千AI助手1 天前
多维空间的高效导航者:KD树算法深度解析
数据结构·人工智能·算法·机器学习·大千ai助手·kd tree·kd树
暗然而日章1 天前
C++基础:Stanford CS106L学习笔记 4 容器(STL与序列容器)
c++·笔记·学习
系夏普1 天前
重拾 C++:Ubuntu开发环境下的C++学习
c++
凋零蓝玫瑰1 天前
几何:数学世界的空间密码
人工智能·算法·机器学习
kk”1 天前
C++ AVL树
开发语言·数据结构·c++
西幻凌云1 天前
认识STLstack容器
c++·stl·适配器·stack·序列式容器
繁华似锦respect1 天前
C++ 设计模式之观察者模式详细介绍
linux·开发语言·c++·windows·观察者模式·设计模式·visual studio
LDG_AGI1 天前
【推荐系统】深度学习训练框架(九):推荐系统与LLM在Dataset、Tokenizer阶段的异同
人工智能·深度学习·算法·机器学习·推荐算法
威桑1 天前
一个 CMake 项目是否只能有一个 install 目录?
linux·c++·cmake
爪哇部落算法小助手1 天前
每日两题day61
数据结构·c++·算法