赞
踩
目录
题目链接:
P8649 [蓝桥杯 2017 省 B] k 倍区间 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
很明显这题是一道前缀和的题
只得了28分
- #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
- #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;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。