1223: 寻找区间和

1223: 寻找区间和Time Limit: 3 SecMemory Limit: 128 MBSubmit: 13Solved: 4[Submit][Status][Web Board]Description

N个正整数组成的序列(N<10^6),给你一个K(0<k<10^9),求出有多少个连续的区间之和为K。例如序列:1 2 3 1 5 且 K=6时,,满足的区间有[1,3],[2,4],[4,5]三个。

Input

多组数据。第一行N,K。第二行A1,A2,…,An。 (0<Ai<10^9)

Output

输出区间个数。

Sample Input5 61 2 3 1 53 51 2 1Sample Output30HINTSource

tyh

解析:交替推进区间左右端点。若区间和小于k,则向右推进区间右端点;若大于,则将区间左端点向右推进。若等于,则统计。

AC代码:

#include <bits/stdc++.h>using namespace std;int a[1000002];int main(){#ifdef sxkfreopen("in.txt", "r", stdin);#endif // sxkint n, k;while(~scanf("%d%d", &n, &k)){for(int i=0; i<n; i++) scanf("%d", &a[i]);int ans = 0, sum = 0;int s = 0;for(int i=0; i<n; ){while(sum < k && i < n) sum += a[i ++]; //推进右端点while(sum >= k){if(sum == k) ans ++; //统计sum -= a[s ++]; //推进左端点}}printf("%d\n", ans);}return 0;}

别想一下造出大海,必须先由小河川开始。

1223: 寻找区间和

相关文章:

你感兴趣的文章:

标签云: