Need help in a problem of two pointers

Правка en6, от bovin, 2024-03-30 17:35:28

Problem

Can someone help me, I don't understand where the error is in the code and reasoning. I'm getting the wrong answer, I'm getting extra segments in the answer

My code:

#include <iostream>
#include <vector>

using namespace std;

int f(int n, long long s, vector<long long>& a) {
    int ans = 0;
    int i = 0;
    long long sum = 0;
    for(int j = 0; j < n; j++) { // move the right pointer here
        sum += a[j]; // update the amount
        while(sum >= s) { // as long as the sum on the segment [i, j]
                         //is greater than or equal to s, move the left pointer        
            sum -= a[i]; // update the amount
            i++;    // move the right pointer
        }
        // since sum < s -> i is not included in the segment => segment length = j &mdash; i
        ans += (j &mdash; i);
    }
    return ans;
}

int main() {
    int n;
    long long s;
    cin >> n >> s;
    vector<long long> a(n);
    for(int i = 0; i < n; i++) cin >> a[i];
    cout << f(n, s, a);
    return 0;
}

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
en6 Английский bovin 2024-03-30 17:35:28 1 Tiny change: 'hile(sum > s) { // a' -> 'hile(sum >= s) { // a'
en5 Английский bovin 2024-03-30 17:34:28 0 (published)
en4 Английский bovin 2024-03-30 17:33:27 4
en3 Английский bovin 2024-03-30 17:32:56 2 Tiny change: 'n\n~~~~~\n#include' -> 'n\n~~~~~\n\n#include' (saved to drafts)
en2 Английский bovin 2024-03-30 17:32:29 1077 (published)
en1 Английский bovin 2024-03-30 17:28:48 128 Initial revision (saved to drafts)