ধরুন 2N ব্যক্তি আছে। একটি কোম্পানি একটি সাক্ষাৎকারের আয়োজন করতে চায়। I-তম ব্যক্তিকে শহর A তে যাওয়ার জন্য খরচ হল খরচ[i][0], এবং I-তম ব্যক্তিকে শহর B তে যাওয়ার খরচ হল খরচ[i][1]। প্রতিটি মানুষকে একটি শহরে যাওয়ার জন্য আমাদের ন্যূনতম খরচ খুঁজে বের করতে হবে, যেমন এন লোকেরা প্রতিটি শহরে আসে। সুতরাং যদি প্রদত্ত তালিকাটি [[10, 20], [30, 200], [400, 50], [30, 20]] হয় তাহলে আউটপুট হবে 110। তাই আমরা ব্যক্তি P1 কে 10 খরচ সহ শহর A-তে পাঠাব। , শহরের A থেকে দ্বিতীয় ব্যক্তি 30 টাকা, তৃতীয় এবং চতুর্থ ব্যক্তিকে শহরের B থেকে যথাক্রমে 50 এবং 20 খরচ।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- n :=অ্যারের আকার
- a :=n / 2 এবং b :=n / 2
- অ্যারে সাজান, এবং উত্তর দিন :=0
- এর জন্য i :=0 থেকে n – 1 −
- যদি b =0 এবং অ্যারে[i, 0] <=array[i, 1] এবং a> 0 হয়, তাহলে
- a 1 কমিয়ে দিন
- উত্তর :=ans + অ্যারে[i, 0]
- অন্যথায়
- b 1 দ্বারা হ্রাস করুন
- উত্তর :=ans + অ্যারে[i, 1]
- যদি b =0 এবং অ্যারে[i, 0] <=array[i, 1] এবং a> 0 হয়, তাহলে
- উত্তর ফেরত দিন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
static bool cmp(vector <int> a, vector <int> b){
return abs(a[0] - a[1]) > abs(b[0] - b[1]);
}
int twoCitySchedCost(vector<vector<int>>& costs) {
int n = costs.size();
int a = n/2;
int b = n/2;
sort(costs.begin(), costs.end(), cmp);
int ans = 0;
for(int i = 0; i < n; i++){
if(b == 0 || (costs[i][0] <= costs[i][1] && a > 0)){
a--;
//cout << a << " " << costs[i][0] << endl;
ans += costs[i][0];
} else {
//cout << costs[i][1] << endl;
b--;
ans += costs[i][1];
}
}
return ans;
}
};
main(){
Solution ob;
vector<vector<int>> c = {{10,20},{30,200},{400,50},{30,20}};
cout << ob.twoCitySchedCost(c);
} ইনপুট
[[10,20],[30,200],[400,50],[30,20]]
আউটপুট
110