浮生一梦暗若痴:第一题,代码。因为改了两个版本。所以有点丑。 思路:先求sum[i],表示前i项的和,然后对每个sum[i]模k,那么我们要找的就是模k后的值相同的那些数中相距最远的。 #include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
bool cmp(const pair<int,int>& a,const pair<int,int>&b){
if(a.first==b.first){
return a.second < b.second;
}else{
return a.first<b.first;
}
}
int main(){
int n;
cin>>n;
vector<int> a(n+1);
vector<int> s(n+1,0);
for(int i=1;i<=n;++i){
cin>>a[i];
s[i] = s[i-1] + a[i];
}
int k;
cin>>k;
int res = 0;
vector<pair<int,int>> mod(n+1);
for(int i=1;i<=n;++i){
mod[i].first = s[i]%k;
mod[i].second = i;
}
sort(mod.begin()+1,mod.end(),cmp);
int l = 0;
int tem = 0;
for(int i=1;i<=n;++i){
if(mod[i].first==tem) continue;
else {
int tres = mod[i-1].second - mod[l].second;
res = max(res,tres);
tem = mod[i].first;
l = i;
}
}
int tres = mod[n].second - mod[l].second;
res = max(res,tres);
cout<<res<<endl;
}

0 点赞 评论 收藏
分享
创作者周榜
更多
关注他的用户也关注了: