import java.util.*;
class Main {
public static void main
(String[] args
) { Scanner sc
= new Scanner
(System.
in);
// Read the size of the array
int n = sc.nextInt();
int[] arr = new int[n];
// Read the elements of the array
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
// Read the target sum k
int k = sc.nextInt();
// Initialize variables
int currentSum = 0;
int smallestLength
= Integer.
MAX_VALUE; int count = 0;
// Map to store the frequency of prefix sums
Map
<Integer, Integer
> map
= new HashMap
<>();
// Initialize the map with the prefix sum of 0 coz what if i get k=5, and arr[0]=5
map.put(0, -1);
for (int i = 0; i < n; i++) {
// Update the current prefix sum
currentSum += arr[i];
// Check if there exists a prefix sum that gives us the required sum k
if (map.containsKey(currentSum - k)) {
int length = i - map.get(currentSum - k);
// Update the smallest length and count
if (length < smallestLength) {
smallestLength = length;
count = 1; // Reset count for new smallest length
} else if (length == smallestLength) {
count++; // Increment count for same smallest length
}
}
// Update the frequency of the current prefix sum
map.put(currentSum, i); // Store the latest index of the prefix sum
/*
say 1 2 3 4 5
at end 15 so now i want length (i+1(0 indexed)) - map.containskey(currsum, i+1)
jth index - i+1 where subarray sum starts but the i+1 in the map is solely coz of 0 indexing
but i didnt like how it made lengths of 1 to become 0 so i made it i itself and put the map
start at (0,-1) prefix sum of 0 is at -1 so it doesnt exist yet
*/
}
// Output the count of special subarrays
System.
out.
println(count
== 0 ? 0 : count
); }
}
aW1wb3J0IGphdmEudXRpbC4qOwoKY2xhc3MgTWFpbiB7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgU2Nhbm5lciBzYyA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CiAgICAgICAgCiAgICAgICAgLy8gUmVhZCB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkKICAgICAgICBpbnQgbiA9IHNjLm5leHRJbnQoKTsKICAgICAgICBpbnRbXSBhcnIgPSBuZXcgaW50W25dOwogICAgICAgIAogICAgICAgIC8vIFJlYWQgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheQogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgIGFycltpXSA9IHNjLm5leHRJbnQoKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gUmVhZCB0aGUgdGFyZ2V0IHN1bSBrCiAgICAgICAgaW50IGsgPSBzYy5uZXh0SW50KCk7CiAgICAgICAgCiAgICAgICAgLy8gSW5pdGlhbGl6ZSB2YXJpYWJsZXMKICAgICAgICBpbnQgY3VycmVudFN1bSA9IDA7CiAgICAgICAgaW50IHNtYWxsZXN0TGVuZ3RoID0gSW50ZWdlci5NQVhfVkFMVUU7CiAgICAgICAgaW50IGNvdW50ID0gMDsKICAgICAgICAKICAgICAgICAvLyBNYXAgdG8gc3RvcmUgdGhlIGZyZXF1ZW5jeSBvZiBwcmVmaXggc3VtcwogICAgICAgIE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBtYXAgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgCiAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgbWFwIHdpdGggdGhlIHByZWZpeCBzdW0gb2YgMCBjb3ogd2hhdCBpZiBpIGdldCBrPTUsIGFuZCBhcnJbMF09NQogICAgICAgIG1hcC5wdXQoMCwgLTEpOwogICAgICAgIAogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudCBwcmVmaXggc3VtCiAgICAgICAgICAgIGN1cnJlbnRTdW0gKz0gYXJyW2ldOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgZXhpc3RzIGEgcHJlZml4IHN1bSB0aGF0IGdpdmVzIHVzIHRoZSByZXF1aXJlZCBzdW0gawogICAgICAgICAgICBpZiAobWFwLmNvbnRhaW5zS2V5KGN1cnJlbnRTdW0gLSBrKSkgewogICAgICAgICAgICAgICAgaW50IGxlbmd0aCA9IGkgLSBtYXAuZ2V0KGN1cnJlbnRTdW0gLSBrKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBzbWFsbGVzdCBsZW5ndGggYW5kIGNvdW50CiAgICAgICAgICAgICAgICBpZiAobGVuZ3RoIDwgc21hbGxlc3RMZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBzbWFsbGVzdExlbmd0aCA9IGxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDE7IC8vIFJlc2V0IGNvdW50IGZvciBuZXcgc21hbGxlc3QgbGVuZ3RoCiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PSBzbWFsbGVzdExlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIGNvdW50Kys7IC8vIEluY3JlbWVudCBjb3VudCBmb3Igc2FtZSBzbWFsbGVzdCBsZW5ndGgKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBmcmVxdWVuY3kgb2YgdGhlIGN1cnJlbnQgcHJlZml4IHN1bQogICAgICAgICAgICBtYXAucHV0KGN1cnJlbnRTdW0sIGkpOyAvLyBTdG9yZSB0aGUgbGF0ZXN0IGluZGV4IG9mIHRoZSBwcmVmaXggc3VtCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgIHNheSAxIDIgMyA0IDUKICAgICAgICAgICAgYXQgZW5kIDE1IHNvIG5vdyBpIHdhbnQgbGVuZ3RoIChpKzEoMCBpbmRleGVkKSkgLSBtYXAuY29udGFpbnNrZXkoY3VycnN1bSwgaSsxKQogICAgICAgICAgICBqdGggaW5kZXggLSBpKzEgd2hlcmUgc3ViYXJyYXkgc3VtIHN0YXJ0cyBidXQgdGhlIGkrMSBpbiB0aGUgbWFwIGlzIHNvbGVseSBjb3ogb2YgMCBpbmRleGluZwogICAgICAgICAgICBidXQgaSBkaWRudCBsaWtlIGhvdyBpdCBtYWRlIGxlbmd0aHMgb2YgMSB0byBiZWNvbWUgMCBzbyBpIG1hZGUgaXQgaSBpdHNlbGYgYW5kIHB1dCB0aGUgbWFwIAogICAgICAgICAgICBzdGFydCBhdCAoMCwtMSkgcHJlZml4IHN1bSBvZiAwIGlzIGF0IC0xIHNvIGl0IGRvZXNudCBleGlzdCB5ZXQKICAgICAgICAgICAgKi8KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gT3V0cHV0IHRoZSBjb3VudCBvZiBzcGVjaWFsIHN1YmFycmF5cwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjb3VudCA9PSAwID8gMCA6IGNvdW50KTsKICAgIH0KfQo=