版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42391248/article/details/84702218
求出前缀和,后缀和,总和,如果k=总和-前缀和-后缀和,就输出i,j。
前缀和后缀和一定要定义成long long类型,不然会溢出。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
typedef long long ll;
int main()
{
ll n,k,i,j,sum=0;
cin>>n>>k;
int a[10005];
for(i=1;i<=n;i++)
{
cin>>a[i];
sum+=a[i];
}
ll fa[10005],sa[10005];
fa[0]=sa[0]=0;
fa[1]=a[1];
sa[1]=a[n];
for(i=2;i<=n;i++)
fa[i]=fa[i-1]+a[i];
for(i=2,j=n-1;i<=n;i++)
sa[i]+=sa[i-1]+a[j--];
int flag=0;
for(i=0;i<=n;i++)
{
for(j=0;j<=n-i;j++)
{
// cout<<sum-fa[i]-sa[j]<<" "<<fa[i]<<" "<<sa[j]<<endl;
if(sum==fa[i]+sa[j]+k)
{
flag=1;
cout<<i+1<<" "<<n-j<<endl;
break;
}
}
if(flag) break;
}
if(!flag) cout<<"No Solution"<<endl;
}