ধরুন আমাদের মূল্যের একটি বিন্যাস রয়েছে P [p1,p2...,pn] এবং একটি লক্ষ্য মান, আমাদের প্রতিটি মূল্য Pi থেকে রাউন্ডি(Pi) পর্যন্ত রাউন্ড করতে হবে যাতে গোলাকার অ্যারে [Round1(P1), Round2(P2) ...,Roundn(Pn)] প্রদত্ত লক্ষ্য মানের যোগফল। এখানে প্রতিটি অপারেশন Roundi(pi) হয় Floor(Pi) বা Ceil(Pi) হতে পারে।
আমাদের স্ট্রিং "-1" ফেরত দিতে হবে যদি বৃত্তাকার অ্যারে লক্ষ্যে যোগ করা অসম্ভব হয়। অন্যথায়, ক্ষুদ্রতম রাউন্ডিং ত্রুটিটি ফেরত দিন, যা হবে (দশমিকের পরে তিনটি স্থান সহ একটি স্ট্রিং হিসাবে) হিসাবে সংজ্ঞায়িত −
$\displaystyle\sum\limits_{i-1}^n |Round_{i} (???? ) - ????$
সুতরাং যদি ইনপুট হয় [“0.700”, “2.800”, “4.900”], এবং লক্ষ্য 8 হয়। (0.7 - 0) + (3 - 2.8) + (5 - 4.9) পেতে ফ্লোর বা সিল অপারেশন ব্যবহার করুন। =0.7 + 0.2 + 0.1 =1.0
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
ret :=0
-
(ডাবল এবং অ্যারে) টাইপ জটিল ডেটা
এর জন্য একটি অগ্রাধিকার সারি pq তৈরি করুন -
আমার জন্য 0 থেকে দামের আকারের মধ্যে
-
x :=দামের দ্বিগুণ মান[i]
-
নিম্ন :=x এর তল
-
উচ্চ :=x এর সিলিং
-
কম হলে বেশি না হয়
-
পার্থক্য :=(উচ্চ - x) - (x - নিম্ন)
-
pq
-এ পার্থক্য সন্নিবেশ করান
-
-
লক্ষ্য :=লক্ষ্য – কম
-
ret :=ret + (x - low)
-
-
যদি লক্ষ্য> pq এর আকার বা লক্ষ্য <0 হয়, তাহলে “-1”
রিটার্ন করুন -
যখন লক্ষ্য 0
নয়-
ret :=ret + pq এর শীর্ষ, pq থেকে মুছুন
- d
-
লক্ষ্য হ্রাস করুন 1
-
-
s :=স্ট্রিং হিসাবে ret করুন
-
তিন দশমিক স্থান পর্যন্ত সংখ্যা নিয়ে সাবস্ট্রিংগুলি ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
struct Comparator{
bool operator()(double a, double b) {
return !(a < b);
}
};
class Solution {
public:
string minimizeError(vector<string>& prices, int target) {
double ret = 0;
priority_queue < double, vector < double >, Comparator > pq;
for(int i = 0; i < prices.size(); i++){
double x = stod(prices[i]);
double low = floor(x);
double high = ceil(x);
if(low != high){
double diff = ((high - x) - (x - low));
pq.push(diff);
}
target -= low;
ret += (x - low);
}
if(target > pq.size() || target < 0) return "-1";
while(target--){
ret += pq.top();
pq.pop();
}
string s = to_string (ret);
return s.substr (0, s.find_first_of ('.', 0) + 4);
}
};
main(){
vector<string> v = {"0.700","2.800","4.900"};
Solution ob;
cout << (ob.minimizeError(v, 8));
} ইনপুট
["0.700","2.800","4.900"] 8
আউটপুট
"1.000"