Cho một dãy số A gồm n số nguyên và một số nguyên k. Một dãy con gồm các phần tử liên tiếp trong A có tổng các phần tử bằng k được gọi là dãy con k. Đếm số lượng dãy con k của dãy A.
#include <stdio.h>
#include <map>
using namespace std;
map <int, int> hm;
map <int, int>:: iterator it;
int sum_of_elements(int a[], int i, int j)
{
int sum=0;
for(int index=i; index<i+j; index++) sum+=a[index];
return sum;
}
void count_subarray(int a[], int n, int k)
{
for(int j=1; j<=n; j++)
for(int i=0; i<n-j+1; i++)
hm[sum_of_elements(a, i, j)]++;
for (it = hm.begin(); it != hm.end(); it++)
if(it->first == k) printf("%d", it->second);
}
main()
{
int n, k;
scanf("%d", &n); scanf("%d", &k);
int a[n];
for(int i=0; i<n; i++)
{
scanf("%d", &a[i]);
}
count_subarray(a, n, k);
}
Code của mình bị TLE (Time Limit Exceeded) với case lớn. Mọi người có ý tưởng nào tối ưu hơn không?