Lỗi gì đó trong c++

anh chị ơi xem dùm em lỗi này lí do là gì ạ
code này của em chấm trên web bị sai:

include <bits/stdc++.h>
define ll long long
define ld long double
define task "total3"
define endl "\n"
using namespace std;
ll n,a[20000019],c[20000019],b[20000019];
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    freopen(task".inp","r",stdin);
    freopen(task".out","w",stdout);
    cin>>n;
    for(ll i=1;i<=n;i++) cin>>a[i];
    for(ll k=3;k<=n-1;k++)
    {
        for(ll i=1;i<=k-2;i++)
            b[a[i]+a[k-1]]++;
        for(ll x=k+1;x<=n;x++)
            c[x]+=b[a[x]-a[k]];
    }
    for(ll i=1;i<=n;i++) cout<<c[i]<<" ";
}

nhưng chỉ cần sửa dòng khai báo thành ll n,a[20000019],b[20000019],c[20000019];
thì nó lại đúng.
giới hạn bộ nhớ là 1G, em cảm ơn ạ.

Ừ vậy đề bài của bạn đâu?

1 Like

không thấy có gì gọi là lỗi trong bài viết

vậy thì lỗi chỗ này, chỉ thế thôi
bạn cần gì khi tạo topic này?

1 Like

It seems to me that you don’t even know how to ask a question. Look at the replies then you’ll understand what I mean. Really weird for an IT learner.


đây anh ạ

do em chưa hiểu lắm vì sao thứ tự khai báo lại ảnh hưởng đến kết quả bài toán anh ạ

Đánh giá chặt chẽ code của bạn thì:

  • mảng a của bạn đọc n số -> chỉ cần khai báo a[5001] là đủ (vì n <= 5e3)
  • mảng b của bạn lưu tần số của các giá trị a[i] + a[k-1], mà |a[i]| <= 1e6 -> -2e6 <= a[i] + a[k-1] <= 2e6. Bạn để limit b[20000019] vẫn còn thiếu đấy :smile: Bạn có để ý trường hợp a[i] + a[k-1] âm không?
  • mảng c của bạn tính bằng công thức c[x] = sum(a[x] - a[k], x = k+1 .. n, k = 3 .. n-1) -> chỉ cần khai báo c[5001] là đủ.

Bạn biết trong code có khai báo mảng bị thiếu độ dài là tốt, tuy nhiên không phải mảng nào cũng kéo dài ra là được vì memory limit exceeded đang chờ bạn ở phía trước.

Bài này đơn thuần chỉ là bạn để mảng thiếu độ dài thôi, tuy nhiên bạn hãy đánh giá kỹ các giới hạn của giá trị để xem khai báo mảng bao nhiêu là vừa. Không liên quan đến thứ tự khai báo.

dạ vâng em cảm ơn ạ.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?