51Nod1094 和为k的连续区间(暴力)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

猜你喜欢

转载自blog.csdn.net/qq_42391248/article/details/84702218
今日推荐