ধরুন একটি সুপারমার্কেটে সেল চলছে, প্রতি n কাস্টমারে ডিসকাউন্ট থাকবে। কয়েকটি প্রোডাক্ট আছে যেখানে i-তম প্রোডাক্টের আইডি products[i] এবং প্রতি ইউনিট দাম prices[i]। সিস্টেম কাস্টমার কাউন্ট রাখবে এবং n-তম কাস্টমার এলেই তার বিলে ডিসকাউন্ট मिलবে। তারপর সিস্টেম আবার কাউন্ট শুরু করবে। কাস্টমার নির্দিষ্ট পরিমাণে প্রোডাক্ট অর্ডার করবে যেখানে product[i] হলো i-তম অর্ডারকৃত প্রোডাক্টের আইডি এবং amount[i] হলো সেটির ইউনিট সংখ্যা। এই সিস্টেম ইমপ্লিমেন্ট করতে হবে। Cashier ক্লাসে এই মেথডগুলো থাকবে:
Cashier(int n, int discount, int[] products, int[] prices) কনস্ট্রাক্টর যা n, ডিসকাউন্ট, প্রোডাক্টস ও প্রাইসেস দিয়ে ইনিশিয়ালাইজ করে।
double getBill(int[] product, int[] amount) এটি বিলের ভ্যালু রিটার্ন করবে এবং প্রয়োজনে ডিসকাউন্ট প্রয়োগ করবে। 10^-5 টলারেন্স একসেপ্টেবল।
উদাহরণস্বরূপ, Cashier(3, 50, [1,2,3,4,5,6,7], [100,200,300,400,300,200,100]) দিয়ে ইনিশিয়ালাইজ করে getBill কল করলে −
getBill([1,2],[1,2]), getBill([3,7],[10,10]), getBill([1,2,3,4,5,6,7],[1,1,1,1,1,1,1]), getBill([4],[10]), getBill([7,3],[10,10]), getBill([7,5,3,1,6,4,2],[10,10,10,9,9,9,7]), getBill([2,3,5],[5,3,2]) — আউটপুট: [500.0, 4000.0, 800.0, 4000.0, 4000.0, 7350.0, 2500.0]
সমাধানের ধাপগুলো:
order নামক একটি map ডিফাইন করুন
Cashier কনস্ট্রাক্টর:
curr := 0
i = 0 থেকে prices array-এর সাইজ পর্যন্ত
order[products[i]] := prices[i]
discount সেট করুন
getBill মেথড:
curr ১ বাড়ান, flag := true যদি curr == n, অন্যথায় false
যদি curr == n হয়, তবে curr := 0
ret := 0
i = 0 থেকে product array size - 1 পর্যন্ত
x := pro[i]
cost := order[x]
y := amount[i]
ret += cost * y
যদি flag সেট থাকে, তবে ret := ret - (ret * discount) / 100
ret রিটার্ন করুন
উদাহরণ (C++)
নিচের ইমপ্লিমেন্টেশন দেখুন ভালো বুঝতে −
#include <bits/stdc++.h> using namespace std; class Cashier { public: int curr; map <double, double> order; int n; int discount; Cashier(int n, int discount, vector<int>& pro, vector<int>& p) { curr = 0; for(int i = 0; i < p.size(); i++){ order[pro[i]] = p[i]; } this->n = n; this->discount = discount; } double getBill(vector<int> pro, vector<int> am) { curr++; bool flag = curr == n; if(curr == n){ curr = 0; } double ret = 0; for(int i = 0; i < pro.size(); i++){ double x = pro[i]; double cost = order[x]; double y = am[i]; ret += (cost * y); } if(flag) ret = ret - (ret * discount) / 100; return ret; } }; main(){ vector<int> v1 = {1,2,3,4,5,6,7}, v2 = {100,200,300,400,300,200,100}; Cashier ob(3, 50, v1, v2); v1 = {1,2}, v2 = {1,2}; cout << (ob.getBill(v1, v2)) << endl; v1 = {3,7}, v2 = {10,10}; cout << (ob.getBill(v1, v2)) << endl; v1 = {1,2,3,4,5,6,7}, v2 = {1,1,1,1,1,1,1}; cout << (ob.getBill(v1, v2)) << endl; v1 = {4}, v2 = {10}; cout << (ob.getBill(v1, v2)) << endl; v1 = {7,3}, v2 = {10,10}; cout << (ob.getBill(v1, v2)) << endl; v1 = {7,5,3,1,6,4,2}, v2 = {10,10,10,9,9,9,7}; cout << (ob.getBill(v1, v2)) << endl; v1 = {2,3,5}, v2 = {5,2,3}; cout << (ob.getBill(v1, v2)) << endl; }
ইনপুট
main ফাংশন দেখুন
আউটপুট
500 4000 800 4000 4000 7350 2500