NxN আকারের একটি ম্যাট্রিক্স দেওয়া আছে। লক্ষ্য হল বৈধ ইনডেক্স পেয়ার (i,j) গণনা করা যাতে কলাম j-এর উপাদানগুলোর যোগফল রোয় i-এর উপাদানগুলোর যোগফলের চেয়ে বড়।
ম্যাট্রিক্স ট্রাভার্স করে প্রতিটি রোয় এবং কলামের উপাদানগুলোর যোগফল বের করা হয়। রোয়ের যোগফল rowsum[N]-এ এবং কলামের যোগফল colsum[N]-এ সংরক্ষণ করা হয়। তারপর rowsum[i] এবং colsum[j] দিয়ে পেয়ার বানিয়ে colsum[j] > rowsum[i] কিনা চেক করা হয়। সত্য হলে count বাড়ানো হয়।
উদাহরণ
ইনপুট:
matrix = {
{ 1,2,0,1},
{ 3,3,0,2},
{ 1,3,0,2},
{ 3,0,0,2}
};
আউটপুট: বৈধ পেয়ার সংখ্যা: ৯
ব্যাখ্যা:
Rowsum[0]=5, Colsum[0]=8 Rowsum[1]=8, Colsum[1]=8 Rowsum[2]=6, Colsum[2]=0 Rowsum[3]=5, Colsum[3]=7 Rowsum[i] < Colsum[j] হয় এমন (i,j) পেয়ার: (0,0), (0,1), (0,3), (2,0), (2,1), (2,3), (3,0), (3,1), (3,3)
ইনপুট:
Arr[] = { {1,1,1}, {1,1,1}, {1,1,1} }, N=3
আউটপুট: বৈধ পেয়ার সংখ্যা: ০
ব্যাখ্যা: সব রোয় এবং কলামের যোগফল ৩। rowsum[i] < colsum[j] হয় এমন কোনো পেয়ার নেই।
অ্যাপ্রোচ
- ইন্টিজার অ্যারে Arr[][] নেওয়া হয়।
- n ভেরিয়েবলে দৈর্ঘ্য।
countPairs(int arr[][3], int n)ফাংশন ম্যাট্রিক্স এবং আকার গ্রহণ করে বৈধ পেয়ার সংখ্যা রিটার্ন করে।- rowsum[n] এবং colsum[n] দুটি অ্যারে নেওয়া হয়।
- ম্যাট্রিক্স ট্রাভার্স করে arr[i][j] rowsum[i]-এ এবং colsum[j]-এ যোগ করা হয়।
- দুটি for লুপ দিয়ে colsum[] এবং rowsum[] ট্রাভার্স করে colsum[j] > rowsum[i] হলে count বাড়ানো হয়।
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
int countPairs(int arr[][3], int n) {
int count = 0;
int rowsum[n] = {0};
int colsum[n] = {0};
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
rowsum[i] += arr[i][j];
colsum[j] += arr[i][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
if (colsum[j] > rowsum[i])
count++;
}
return count;
}
int main() {
int Arr[][3] = { {1,3,5}, {2,4,6}, {3,5,7} };
int side = 3;
cout << endl << "Count of number of pairs : " << countPairs(Arr, side);
return 0;
}
আউটপুট
Count of number of pairs : 4