和为k的连续区间(mp+前缀和) 51nod1094

#include 
using namespace std;
const int MAX_VALUE = 1e4+5;
int n,k;
mapmp;
	long long  a[MAX_VALUE];
	long long s[MAX_VALUE];
int main(){
	
	scanf("%d%d",&n,&k);
	memset(s,0,sizeof(s));
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		s[i] = (s[i-1]+a[i]);
		mp[s[i]]++;            //统计连续区间的和
	}
	for(int i=0;i<=n;i++){  
		if(mp[s[i]+k]){     //如果是s[i]+k出现过,就查找是否有符合要求的区间
			for(int j=i;j<=n;j++){
				if(s[j]-s[i]==k){     //符合
					cout<

你可能感兴趣的:(暑期集训刷题算法复习(新手,))