#include<bits/stdc++.h>
using namespace std;
struct Node{
int start;
int end;
};
int main(){
//freopen("in.txt","r",stdin);freopen("out.txt","w",stdout);
int n,m;cin>>n>>m;
vector<int> ppp;
ppp.resize(n+1);
for(int i=1;i<=n;i++){
cin>>ppp[i];
}
int cnt=0;
//map<int,int> mp;
vector<Node> mp;
for(int i=1;i<=n;i++){
int ans=0;int flag=0;int temp;
for(int j=i;j<=n;j++){
ans+=ppp[j];
if(ans==m){
temp=j;flag=1;break;
}else if(ans<m&&ans+ppp[j+1]>m){
Node temp1;
temp1.start=i;
temp1.end=j+1;
mp.push_back(temp1);
break;
}
}
if(flag==1){
printf("%d-%d\n",i,temp);cnt++;
}
}
if(cnt==0){
int maxsum=100000001;
vector<Node> hash;
for(int i=0;i<mp.size();i++){
int temp=0;
for(int j=mp[i].start;j<=mp[i].end;j++){
temp+=ppp[j];
}
if(maxsum>temp){
maxsum=temp;
hash.clear();
hash.push_back(mp[i]);
}else if(maxsum==temp){
hash.push_back(mp[i]);
}
}
for(int i=0;i<hash.size();i++){
printf("%d-%d\n",hash[i].start,hash[i].end);
}
}
return 0;
}
待修改。。。
本文探讨了使用C++解决子数组求和问题的方法,通过定义结构体Node存储子数组的起始和结束位置,利用vector进行动态数组操作,实现了寻找等于特定目标值m的子数组,并在未找到精确匹配的情况下,寻找最接近目标值的子数组。
798

被折叠的 条评论
为什么被折叠?



