一段和
N个正整数,如果连续的一段(可能是一个数)和能被M整除,输出这一段的开始位置和结束位置。如果答案有多段,输出结束位置最前面的一段。
输入格式
第一行:2个正整数N和M,范围 1<M<N<100000。
第二行:N个正整数,每个数范围[1,10000]。
输出格式
2个正整数。
- 看到题目叫“一段和”,立刻就想到了对数组A求前缀和S
- A和S要开long long!!!
- 如果Si和Sj模m的余数(除了0之外)相同,说明[S(i+1), Sj]的和是m的倍数————[i+1,j]就是答案
- 某个余数在之前是否出现,可以用map统计
- 注意余数为0时的特判:答案的左区间一定是0+1=1
#include<bits/stdc++.h> using namespace std; long long a[100005],b[100005]; int main() { int n,m; cin>>n>>m; map<int,int> mp; for(int i=1;i<=n;i++){ cin>>a[i]; b[i]=b[i-1]+a[i]; int k=b[i]%m; if(mp[k]==0 && k!=0) mp[k]=i; else{ cout<<mp[k]+1<<" "<<i; return 0; } } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~