সমস্যা বিবরণ
একটি আয়তের দৈর্ঘ্য-প্রস্থ (n, m) এবং কাটার সংখ্যা (k) দেওয়া থাকলে, ঠিক kবার কাটা দিয়ে তৈরি হয়েছে সবচেয়ে ছোট টুকরোর এলাকা সর্বোচ্চ কত হতে পারে তা বের করুন।
সমাধানের পদ্ধতি
- যদি
k > (n + m - 2)হয়, তবে "Not possible" (কাটার সংখ্যা বেশি)। - যদি
k < max(m, n) - 1:- একদিকেই সব কাটা দিন:
max(m * (n/(k+1)), n * (m/(k+1)))
- একদিকেই সব কাটা দিন:
- অন্যথায় (দুইদিকে কাটা লাগবে):
max(m / (k - n + 2), n / (k - m + 2))
C++ কোড উদাহরণ
#include <bits/stdc++.h>
using namespace std;
void max_area(int n, int m, int k) {
if (k > (n + m - 2))
cout << "Not possible" << endl;
else {
int result;
if (k < max(m, n) - 1) {
result = max(m * (n / (k + 1)), n * (m / (k + 1)));
} else {
result = max(m / (k - n + 2), n / (k - m + 2));
}
cout << result << endl;
}
}
int main() {
int n = 3, m = 4, k = 1;
max_area(n, m, k);
return 0;
}
আউটপুট
6
ব্যাখ্যা
n=3, m=4, k=1। max(m,n)-1 = 3। k=1 < 3, তাই প্রথম শর্তে।
m * (n/(k+1)) = 4 * (3/2) = 4*1 = 4
n * (m/(k+1)) = 3 * (4/2) = 3*2 = 6 → সর্বোচ্চ 6
জটিলতা
- সময়: O(1)
- স্থান: O(1)