蓝桥杯备战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;
}
相关推荐
linweidong4 小时前
C++ 模块化编程(Modules)在大规模系统中的实践难点?
linux·前端·c++
半桔8 小时前
【IO多路转接】高并发服务器实战:Reactor 框架与 Epoll 机制的封装与设计逻辑
linux·运维·服务器·c++·io
HABuo9 小时前
【linux文件系统】磁盘结构&文件系统详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
我在人间贩卖青春10 小时前
C++之多重继承
c++·多重继承
颜酱10 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
m0_7369191010 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi98783810 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
DuHz10 小时前
超宽带脉冲无线电(Ultra Wideband Impulse Radio, UWB)简介
论文阅读·算法·汽车·信息与通信·信号处理
Polaris北极星少女11 小时前
TRSV优化2
算法
代码游侠11 小时前
C语言核心概念复习——网络协议与TCP/IP
linux·运维·服务器·网络·算法