Trang chủ Tin Học Lớp 10 Cho mảng a kích thước m × n chứa các...

Cho mảng a kích thước m × n chứa các số nguyên. Yêu cầu: Tính tổng các số trong hình chữ nhật có ô trái trên là (x, y) và ô phải dưới là (u, v) Input: • Dòng đ

Câu hỏi :

Cho mảng a kích thước m × n chứa các số nguyên. Yêu cầu: Tính tổng các số trong hình chữ nhật có ô trái trên là (x, y) và ô phải dưới là (u, v) Input: • Dòng đầu tiên là hai số m, n • m dòng tiếp theo, dòng thứ i chứa n số nguyên là a[i][j] • Dòng tiếp theo là số q • q dòng tiếp theo, dòng thứ i chứa 4 số nguyên x, y, u, v Output: • q dòng, dòng thứ i là câu trả lời cho truy vấn thứ i Giới hạn: • 1 ≤ m, n ≤ 105 • 1 ≤ m × n ≤ 105 • 0 ≤ a[i][j] ≤ 100 • 1 ≤ q ≤ 10 • 1 ≤ x ≤ u ≤ m • 1 ≤ y ≤ v ≤ n C++

Lời giải 1 :

#include<bits/stdc++.h>
using namespace std;
int main()
{
 int n,m,k;
 cin>>m>>n;
 int a[m][n+1];
 for (int i=0;i<m;i++)
 {
  a[i][0]=0;
  cin>>a[i][1];
  for (int j=2;j<=n;j++)
  {
   cin>>a[i][j];
   a[i][j]=a[i][j]+a[i][j-1];
  }
 }
 cin>>k;
 for (int i=0;i<k;i++)
 {
  int x,y,u,v,t=0;
  cin>>x>>y>>u>>x;
  for (int j=x-1 ;j<u ;j++)
  {
   t=t+ a[j][y-1]+a[j][x];
  }
  cout<<t<<endl;
 }
}

Thảo luận

-- =) thì mình dùng 2 for để nhập và lưu kết quả cộng trên 1 dòng bạn có thể gg Prefix sum nếu muôsn hiểu đoạn mảng của mình
-- rồi mình cộng từng kết quả của từng hàng vào với nhau
-- sẽ ra tổng của hình cần tính
-- mới đọc vài đoạn đầu trong https://en.wikipedia.org/wiki/Prefix_sum đã thấy đau đầu rồi. đúng là hs chuyên có khác ngôn nữa hơi khó hiểu:))
-- thôi dù sao cx phải đọc tiếp:((
-- =) cứ từ từ thôi bạn thuật toán mà
-- học từng cái 1 1
-- uh tks bạn

Lời giải 2 :

#include <iostream>
using namespace std;

typedef long long ll;

const int maxn = 1e5 + 5;
int n,m,q,x,y,u,v,t;

int readint(){
    int x;cin >> x;return x;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    
    cin >> n >> m;
    ll a[n+1][m+1];
    for (int i = 1;i <= n;i++)
        for (int j = 1;j <= m;j++)
            if (j == 1)
                a[i][j] = readint();
            else
                a[i][j] = a[i][j-1] + readint();
    
    for (cin >> q;q--;)
    {
        cin >> x >> y >> u >> v;
        t = 0;
        for (int i = x;i <= u;i++)
            t += a[i][v] - a[i][y-1];
        cout << t << '\n';
    }
}

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ự 10

Lớp 10 - Năm thứ nhất ở cấp trung học phổ thông, năm đầu tiên nên có nhiều bạn bè mới đến từ những nơi xa hơn vì ngôi trường mới lại mỗi lúc lại xa nhà mình hơn. Được biết bên ngoài kia là một thế giới mới to và nhiều điều thú vị, một trang mới đang chò đợi chúng ta.

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