Trang chủ Tin Học Lớp 9 Cho dãy số nguyên , một đoạn con bắt đầu...

Cho dãy số nguyên , một đoạn con bắt đầu từ phần tử thứ đến phần tử thứ được gọi là cân bằng nếu . Ví dụ, trên dãy , một đoạn con bắt đầu từ phần tử thứ đến ph

Câu hỏi :

Cho dãy số nguyên , một đoạn con bắt đầu từ phần tử thứ đến phần tử thứ được gọi là cân bằng nếu . Ví dụ, trên dãy , một đoạn con bắt đầu từ phần tử thứ đến phần tử thứ là một đoạn cân bằng vì , hoặc một đoạn con khác bắt đầu từ phần tử thứ đến phần tử thứ cũng là một đoạn cân bằng vì . Một phần tử của dãy có thể thuộc vào nhiều đoạn con cân bằng, với ví dụ trên phần tử thứ thuộc vào hai đoạn con cân bằng. Trang 2/3 Yêu cầu: Cho dãy số nguyên , với mỗi phần tử của dãy, hãy đếm số lượng đoạn con cân bằng chứa nó. Dữ liệu: Vào từ thiết bị nhập chuẩn theo khuôn dạng: - Dòng đầu tiên chứa số nguyên dương ; - Dòng thứ hai chứa số nguyên dương là dãy , các số cách nhau bởi dấu cách và có giá trị tuyệt đối không vượt quá . Kết quả: Ghi ra thiết bị ra chuẩn gồm dòng, dòng thứ là số lượng đoạn con cân bằng chứa phần tử thứ .

image

Lời giải 1 :

#include<bits/stdc++.h>

#define ll long long

#define nmax 100000

using namespace std;

int n,a[nmax],ans[nmax]; ll b[nmax];

unordered_map<ll,int,custom_hash> m,k;

void solve()

{

   cin>>n;

   b[0] = 0;

   for(int i = 1; i <= n; i++)

   {

        cin>>a[i];

        b[i] = b[i-1] + a[i];

        m[b[i]]++; k[b[i]] = m[b[i]];

   }

   for(int i = 1; i <= n; i++)

   {

          if(m[b[i]] == k[b[i]] && m[b[i]] > 1)

          {

              m[b[i]]--; ans[i+1] += m[b[i]];

          }

           else if(m[b[i]] == 1 && k[b[i]] > 1)

         {

             ans[i+1] -= (k[b[i]] - 1);

          }

          else if(m[b[i]] > 1)

          {

              m[b[i]]--; ans[i+1] += m[b[i]]; ans[i+1] -= (k[b[i]] - m[b[i]]); ans[i+1]++;

          }

    }

    for(int i = 1; i <= n; i++)

    {

         ans[i] += ans[i-1];

         cout<<ans[i]<<" ";

    }

}

int main()

{

   solve();

}

Code của rồng t code đang bị CE, sửa cho t luôn nha carot 15

Thảo luận

-- ơ từ từ :)) xóa cái liên quan đến map đi nhá :))
-- okt tks Hung, mà cho t xin nick face ông đi
-- inline int readInt() {char c;while(c=getchar(),c!='-'&&(c<'0'||c>'9'));bool sign=(c=='-');if(sign)c=getchar();int n=c-'0';while(c=getchar(),c>='0'&&c<='9')n=10*n+c-'0';return(!sign)?n:-n;} này chi
-- #include <map> này à
-- code ông dovanhung ảo nhỉ =)
-- okt tks Hung, mà cho t xin nick face ông đi t tên huy mà :)) không phải hung :))
-- inline int readInt() {char c;while(c=getchar(),c!='-'&&(c<'0'||c>'9'));bool sign=(c=='-');if(sign)c=getchar();int n=c-'0';while(c=getchar(),c>='0'&&c<='9')n=10*n+c-'0';return(!sign)?n:-n;} kiểu fast read ấy :v thấy cho vô nó nhanh hơn kha khá
-- oke Huy cho t xin face ông đi

Lời giải 2 :

#include <iostream>
#include <map>
using namespace std;
typedef long long ll;

inline int readInt() {char c;while(c=getchar(),c!='-'&&(c<'0'||c>'9'));bool sign=(c=='-');if(sign)c=getchar();int n=c-'0';while(c=getchar(),c>='0'&&c<='9')n=10*n+c-'0';return(!sign)?n:-n;}

const int nmax = 3e5 + 5;
ll n, a[nmax], ans[nmax];
map<ll, ll> m,k;

void solve() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    
    n = readInt();
    a[0] = 0;
    for(int i = 1; i <= n; i++) {
        a[i] = readInt();
        a[i] += a[i - 1];
        k[a[i]] = ++m[a[i]];
    }

    for(int i = 1; i <= n; i++) {
        if(m[a[i]] == k[a[i]] && m[a[i]] > 1) {
            ans[i + 1] += --m[a[i]];
            
        } else if(m[a[i]] == 1) {
            ans[i + 1] -= max(k[a[i]] - 1, 0ll);
            
        } else if(m[a[i]] > 1) {
            ans[i + 1] += --m[a[i]]; 
            ans[i + 1] -= (k[a[i]] - m[a[i]]) - 1;          
        }
    }

    for(int i = 1; i <= n; i++) {
        ans[i] += ans[i - 1];
        cout << ans[i] << " ";
    }
}

int main() {
    solve();
}

Bạn có biết?

Tin học, tiếng Anh: informatics, tiếng Pháp: informatique, là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng (ảo). Với cách hiểu hiện nay, tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin.

Nguồn : Wikipedia - Bách khoa toàn thư

Tâm sự 9

Lớp 9 - Là năm cuối ở cấp trung học cơ sở, sắp phải bước vào một kì thi căng thẳng và sắp chia tay bạn bè, thầy cô và cả kì vọng của phụ huynh ngày càng lớn mang tên "Lên cấp 3". Thật là áp lực nhưng các em hãy cứ tự tin vào bản thân là sẻ vượt qua nhé!

Nguồn : ADMIN :))

Liên hệ hợp tác hoặc quảng cáo: gmail

Điều khoản dịch vụ

Copyright © 2021 HOCTAPSGK