Hỏi về bài toán phần tử lớn nhất nhỏ nhất

Mọi người sửa giúp e bài này với:
Nhập vào ma trận A kích thước n*m. In ra số lượng các phần ử yên ngựa. Phần tử a[i,j] được coi là phần tử yên ngựa của ma trận khi nó là phần tử nhỏ nhất của hàng, đồng thời là phần tử lớn nhất của cột.
INPUT: Dòng 1 là 2 số nguyên dương n, m(1<=n,m<=20). n dòng tiếp theo, mỗi dòng là m số nguyên dương trong khoảng [-1000,1000].
OUTPUT: Số lượng phần tử yên ngựa.

#include<bits/stdc++.h>
using namespace std;
int main()
{
	long long n, m, i, j , a[100][100];
	long long dem=0, mn=INT_MAX, vt;
	long long mx=INT_MIN;
	cin >> n >> m;
	for(i=1;i<=n;i++)
		for(j=1;i<=m;j++)
			cin >> a[i][j];
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			if(a[i][j]<mn)
				mn=a[i][j];
		}
		for(j=1;j<=m;j++){
			if(a[i][j]==mn){
				vt=j;
				for(i=1;i<=n;i++){
					if(mx<a[i][vt])
						mx=a[i][vt];
				}
				for(i=1;i<=n;i++){
					if(mx==mn){
						dem++;}
				}
			}
		}
	}
	cout << dem;
		
}

Bài này e test trên IDE thì đúng nhưng mà khi đưa vào trình chấm thì nó lại chạy quá thời gian. Các cao nhân giúp e với

  • 0 < n,m < 21-1001 < a[i,j] < 1001 mà dùng kiểu long long luôn!
  • Lại là for từ 1.
  • Quá thời gian chắc vì nhiều vòng lặp quá. Bạn có thể gộp những vòng lặp giống nhau lại.

Ý tưởng của mình là bạn tìm nhỏ nhất của hàng ngay khi nhập luôn. Lưu chỉ số của phần tử đó vào cuối hoặc đầu mảng (của hàng).
Hai vòng lặp lồng tiếp theo thì duyệt qua các cột, kiểm tra và đếm là xong.

4 Likes

Lưu chỉ số vào đầu hoặc cuối mảng thì nhỡ đâu xảy ra lỗi thì sao ah???

Mảng của bạn là 100x100 phần tử, mà n, m chỉ có <=20, còn thừa cả 80 thì lỗi gì?
Thêm nữa, bạn nên cho nhập n,m trước rồi tạo mảng mảng a theo n,m thì hay hơn.

4 Likes

Code có using namespace std rồi cin cout mà cứ gắn tag C là sao nhỉ :roll_eyes:


Nên làm 2 mảng 1 chiều, 1 mảng là biểu thị min của hàng i, 1 mảng là biểu thị max của cột j rồi so sánh cho nhanh, thay vì đặt tên nhiều biến rồi làm khá là lòng vòng.

Lưu chỉ số chưa chắc đã tốt. Nếu có những test kiểu như thế này

1 1
2 2

thì bạn đếm xem có bao nhiêu phần tử yên ngựa? 1, 2 hay không có cái nào?

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