ধরুন আমাদের মূল্যের একটি বিন্যাস রয়েছে 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"