1 条题解
-
0njnu21200106 (fmy_xfk) LV 8 @ 2022-02-04 12:59:35
令\(s[i]\)表示\(s[i]=(a_1+a_2+...+a_i) mod k\),则以\(r\)为区间右端点的区间数量为\([1,r-1]\)中余数与\(s[r]\)相同的元素数量。特别的,\(s[r]=0\)时,额外加1。
#include<cstdio> using namespace std; const int MAXN = 1e6+10; const int MAXK = 1e6+10; int a[MAXN],s[MAXN]; int mod[MAXK]; int main() { int n,k;long long ans=0; scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) { scanf("%d",a+i); s[i]=(s[i-1]+a[i])%k; ans+=mod[s[i]]; if(s[i]==0) ans++; mod[s[i]]++; } printf("%lld",ans); return 0; }
- 1
信息
- ID
- 1306
- 难度
- 9
- 分类
- (无)
- 标签
- 递交数
- 151
- 已通过
- 11
- 通过率
- 7%
- 被复制
- 1
- 上传者