Hướng dẫn giải của TS10 Hà Tĩnh 2023 - Dãy đặc trưng

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người làm lời giải.


Nộp code mẫu trước khi tự giải được bài tập là một hành vi có thể bị ban.

Ý tưởng

Để dễ dàng giải quyết bài toán này, ta sẽ xét lần lượt dương và âm.

Lưu ý: ~0~ không phải là số dương hay số âm.

Cài đặt

  • Xét số dương, khởi tạo biến pos(vị trí) là ~0~.
    • Nếu ~a_i~ là số dương thì cập nhật kết quả i-pos
    • Ngược lại, cập nhật pos=i
  • Tương tự với số âm
Code tham khảo
void Input()
{
    cin>>n;
    for(int i=1;i<=n;i++)   cin>>a[i];
    int pos=0;  int ans=0;

    for(int i=1;i<=n;i++)
        if(a[i]>=0)     pos=i;
        else    ans=max(ans,i-pos);

    pos=0;
    for(int i=1;i<=n;i++)
        if(a[i]<=0) pos=i;
        else ans=max(ans,i-pos);

    cout<<ans;
}

Độ phức tạp : ~\mathcal{O}(n)~.


Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.