zoukankan      html  css  js  c++  java
  • HLJU 1223: 寻找区间和 (交替推进法)


    1223: 寻找区间和

    Time Limit: 3 Sec  Memory Limit: 128 MB
    Submit: 13  Solved: 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 Input

    5 6
    1 2 3 1 5
    3 5
    1 2 1
    

    Sample Output

    3
    0
    

    HINT

    Source

    tyh



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




    AC代码:

    #include <bits/stdc++.h>
    using namespace std;
    
    int a[1000002];
    
    int main(){
        #ifdef sxk
            freopen("in.txt", "r", stdin);
        #endif // sxk
    
        int 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
    ", ans);
        }
        return 0;
    }
    



  • 相关阅读:
    mysql表检查分析优化
    mysql表存储
    mysql表空间文件
    mysql回滚日志
    mysql重做日志
    mysql二进制日志
    最佳高质量字体
    mysql存储引擎
    如何提取app软件的apk格式中的字体?
    tar split命令
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7111251.html
Copyright © 2011-2022 走看看