#include <iostream>
#include <vector>
#include <unordered_map>
#include <climits>
using namespace std;
int countShortestSubarraysWithSumK(const vector<int>& nums, int k) {
unordered_map<int, int> seen; // prefix_sum -> earliest index
seen[0]=-1;int sum=0, min=INT_MAX,c=0;
for (int i = 0; i < nums.size(); ++i) {
sum+=nums[i];
if (seen.find(sum - k) != seen.end()) {
int x=i-seen[sum-k];
if(x<min){ x=min; c=1;}
else if(x==min) c++;
}
if (seen.find(sum) == seen.end()) {
seen[sum] = i;
}
}
return c;
}
int main() {
vector<int> A = {10, 5, 2, 7, 1, 9, 8, 7};
int k = 15;
int result = countShortestSubarraysWithSumK(A, k);
cout << "Count of shortest subarrays with sum = " << k << " is: " << result << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPGNsaW1pdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgY291bnRTaG9ydGVzdFN1YmFycmF5c1dpdGhTdW1LKGNvbnN0IHZlY3RvcjxpbnQ+JiBudW1zLCBpbnQgaykgewogICAgdW5vcmRlcmVkX21hcDxpbnQsIGludD4gc2VlbjsgLy8gcHJlZml4X3N1bSAtPiBlYXJsaWVzdCBpbmRleAogICAgc2VlblswXT0tMTtpbnQgc3VtPTAsIG1pbj1JTlRfTUFYLGM9MDsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bXMuc2l6ZSgpOyArK2kpIHsKICAgIAlzdW0rPW51bXNbaV07CiAgICAJaWYgKHNlZW4uZmluZChzdW0gLSBrKSAhPSBzZWVuLmVuZCgpKSB7CiAgICAJCWludCB4PWktc2VlbltzdW0ta107CiAgICAJCWlmKHg8bWluKXsgeD1taW47IGM9MTt9CiAgICAJCWVsc2UgaWYoeD09bWluKSBjKys7CiAgICAJCQogICAgCX0KICAgIAkgaWYgKHNlZW4uZmluZChzdW0pID09IHNlZW4uZW5kKCkpIHsKICAgICAgICAgICAgc2VlbltzdW1dID0gaTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gYzsKfQoKaW50IG1haW4oKSB7CiAgICB2ZWN0b3I8aW50PiBBID0gezEwLCA1LCAyLCA3LCAxLCA5LCA4LCA3fTsKICAgIGludCBrID0gMTU7CgogICAgaW50IHJlc3VsdCA9IGNvdW50U2hvcnRlc3RTdWJhcnJheXNXaXRoU3VtSyhBLCBrKTsKICAgIGNvdXQgPDwgIkNvdW50IG9mIHNob3J0ZXN0IHN1YmFycmF5cyB3aXRoIHN1bSA9ICIgPDwgayA8PCAiIGlzOiAiIDw8IHJlc3VsdCA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==