【洛谷 8649】 [蓝桥杯 2017 省 B] k 倍区间
题目描述
给定一个长度为 �N 的数列,�1,�2,⋯��A1,A2,⋯AN,如果其中一段连续的子序列 ��,��+1,⋯��(�≤�)Ai,Ai+1,⋯Aj(i≤j) 之和是 �K 的倍数,我们就称这个区间 [�,�][i,j] 是 �K 倍区间。
你能求出数列中总共有多少个 �K 倍区间吗?
输入格式
第一行包含两个整数 �N 和 �K(1≤�,�≤105)(1≤N,K≤105)。
以下 �N 行每行包含一个整数 ��Ai(1≤��≤105)(1≤Ai≤105)。
输出格式
输出一个整数,代表 �K 倍区间的数目。
输入输出样例
输入 #1
5 2 1 2 3 4 5
输出 #1
6
说明/提示
时限 2 秒, 256M。蓝桥杯 2017 年第八届
题解:没开longlong老错一个点,运用到同余定理:如果a%k==b%k 则由|a-b|%k==0
#include<bits/stdc++.h> using namespace std; const int N=100003; long long a[N],n,k,ans; long long sum; long long b[N]; int main(){ freopen("8649.in","r",stdin); freopen("8649.out","w",stdout); scanf("%lld %lld",&n,&k); b[0]=1; for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); sum=(sum+a[i])%k; b[sum]++; } /*for(int i=0;i<=n;i++) for(int j=i+1;j<=n;j++) if((f[j]-f[i])%k==0) ans++;*/ for(int i=0;i<k;i++){ ans+=(b[i]*(b[i]-1))/2; } printf("%lld",ans); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
2020-10-26 【洛谷 4880】抓住czxx
2020-10-26 【UOJ 114】分火腿
2020-10-26 【UOJ 129】最大公约数
2020-10-26 【UOJ 137】行动!行动!