1. 程式人生 > >51Nod1094 和為k的連續區間(暴力)

51Nod1094 和為k的連續區間(暴力)

 求出字首和,字尾和,總和,如果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;
}