Tổng k số

Xem PDF

Điểm: 200 (p) Thời gian: 0.5s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cho dãy số nguyên dương gồm \(N\) phần tử \(a_1,a_2,..,a_N\) và số nguyên dương \(K\). Chọn ra \(K\) phần tử liên tiếp sao cho tổng của chúng là lớn nhất. In ra giá trị đó

Input

  • Dòng 1: hai số nguyên dương \(N\)\(K\) \((K \le N \le 10^5)\);
  • Dòng 2: gồm \(N\) số nguyên dương \(a_1,a_2,...,a_N\) \((a_i \le 10^9)\)

Output

  • In ra đáp án thỏa mãn yêu cầu đề bài.

Example

Test 1

Input
6 2
2 4 5 2 9 1 
Output
11

Bình luận


  • 0
    xuankien18062013    7:49 p.m. 21 Tháng 10, 2024

    N, K = map(int, input().split())
    arr = list(map(int, input().split()))
    a = sum(arr[:K])
    b = a

    for i in range(K, N):
    a += arr[i]-arr[i -K]
    b=max(b, a)

    print(b)


    • -1
      BestFlo2k9    12:10 p.m. 26 Tháng 7, 2024

      Prefix sum là full ac


      • -3
        trieuanhtri    10:23 a.m. 26 Tháng 7, 2024

        def max_sum_of_k_consecutive_elements(N, K, arr):

        current_sum = sum(arr[:K])
        max_sum = current_sum
        
        for i in range(K, N):
            current_sum = current_sum - arr[i - K] + arr[i]
            if current_sum > max_sum:
                max_sum = current_sum
        
        return max_sum
        

        N, K = map(int, input().split())
        arr = list(map(int, input().split()))

        result = max_sum_of_k_consecutive_elements(N, K, arr)
        print(result)
        code python full ac nhé


        • 6
          TranDucAnhh    10:20 a.m. 26 Tháng 7, 2024

          include <bits/stdc++.h>

          using namespace std;

          int main()
          {
          int n, k;
          cin >> n >> k;

          vector<int> a(n);
          for (int &x : a) cin >> x;
          
          long long sum = 0;
          for (int i = 0; i < k; ++i) sum += a[i];
          
          long long res = sum;
          for (int i = k; i < n; ++i) {
              sum += a[i] - a[i - k];
              res = max(res, sum);
          }
          
          cout << res;
          return 0;
          

          }
          CODE AC


          • 0
            hjhjhjhjhj    3:14 p.m. 6 Tháng 4, 2024

            INF = float("-inf")
            n, k = map(int, input().split())
            a = list(map(int, input().split()))
            d = [0] * (n + 1)
            for i in range(1, n + 1):
            d[i] = d[i - 1] + a[i - 1]
            nmax = INF
            if k <= n:
            for i in range(k, n + 1):
            nmax = max(nmax, d[i] - d[i - k])
            print(nmax)
            PY3


            • -3
              khoinguyentl2023    11:57 a.m. 27 Tháng 3, 2023

              admin ơi tăng thời gian cho python đi

              1 phản hồi

              • 4
                Phucc    9:48 p.m. 5 Tháng 10, 2022

                ad ơi ad cập nhật tăng bộ nhớ đi ạ, em làm đúng kết quả nhưng thiếu bộ nhớ :((

                1 phản hồi

                • -48
                  donhatnam    9:24 a.m. 1 Tháng 9, 2020

                  Bình luận bị ẩn vì nhiều phản hồi tiêu cực. Nhấp vào đây để mở.


                  • 15
                    SPyofgame    4:25 p.m. 7 Tháng 6, 2020 chỉnh sửa 2

                    Spoiler Alert

                    Code mang tính tham khảo

                    Sliding Window || O(n) space

                    C++
                    int main()
                    {
                        int n = readInt();
                        int k = readInt();
                    
                        vector<int> a(n);
                        for (int &x : a) getSigned(x);
                    
                        ll sum = 0;
                        for (int i = 0; i < k; ++i) sum += a[i];
                    
                        ll res = sum;
                        for (int i = k; i < n; ++i) res = max(res, sum += a[i] - a[i - k]);
                    
                        cout << res;
                        return 0;
                    }
                    


                    Sliding Window using Deque | O(k) space

                    C++
                    int main()
                    {
                        int n = readInt();
                        int k = readInt();
                    
                        ll sum = 0;
                        deque<int> S;
                        for (int i = 0; i < k; ++i)
                        {
                            S.push_back(readInt());
                            sum += S.back();
                        }
                    
                        ll res = sum;
                        for (int i = k; i < n; ++i)
                        {
                            S.push_back(readInt());
                            res = max(res, sum += S.back() - S.front());
                            S.pop_front();
                        }
                    
                        cout << res;
                        return 0;
                    }
                    


                    Prefix Sum Array Implementation

                    C++
                    int main()
                    {
                        int n = readInt();
                        int k = readInt();
                    
                        vector<ll> a(n + 1, 0);
                        for (int i = 1; i <= n; ++i)
                            a[i] = a[i - 1] + readInt();
                    
                        ll res = a[k];
                        for (int i = k + 1; i <= n; ++i)
                            res = max(res, a[i] - a[i - k]);
                    
                        cout << res;
                        return 0;
                    }
                    

                    • 0
                      SPyofgame    3:39 p.m. 7 Tháng 6, 2020

                      Tag: Sliding window || Prefix Sum Array