Chào mọi người ạ! Mọi người có thể cho mình xin ý tưởng bài này không ạ?
Tìm dãy con có tổng bằng S (n <=2.10^6, s<=10^9)
Dùng kĩ two pointer thôi bạn
Trong bài này thay vì tìm 1 cặp a[i], a[j] thì tính cộng dồn từ i đến j. Do a[i] > 0 nên tổng này là dãy tăng khi tăng j và giảm khi tăng i.
9 Likes
Bạn đã thử làm cách tệ nhất chưa? Là cách đề ghi sao làm y như vậy, O(n^3)
2 Likes
Rồi chừng nào xong
Bài này dùng prefix sum
3 Likes
Khi người ta chưa nghĩ ra được gì thì bạn nói “prefix sum” có giúp ích được gì? Bạn đang muốn tỏ ra bạn biết giải? có quan trọng không?
học lập trình phải đi từ phương pháp đơn giản rồi mới tới những thứ như giải thuật,
ngay cả implement cái đề bài còn chưa được thì nói gì tới giải thuật ở đây?
3 Likes
Cách kém tối ưu O(n^2)
#include <iostream>
using namespace std;
int tinhKetQua(int a[], int n, int K){
int kq = 0;
for(int i = 0;i < n; i++){
int sum = 0;
for(int j = i;j<n;j++){
sum += a[j];
if(sum == K){
kq++;
}
}
}
return kq;
}
int main()
{
int kq = 0;
int n,K;
cin>>n>>K;
int a[n];
for(int i = 0;i<n;i++){
cin>>a[i];
}
kq = tinhKetQua(a,n,K);
cout<<kq;
return 0;
}
3 Likes