কম্পিউটার টিউটোরিয়াল

C++ প্রোগ্রাম: বিডালের কথা ও রঙিন টুপি দিয়ে সত্যতা যাচাই


মান লিজিয়ে, A নামক একটি অ্যারে আছে যাতে N টি উপাদান রয়েছে। N টি বিডাল আছে যাদের ১ থেকে N পর্যন্ত নম্বর দেওয়া আছে। প্রতিটি বিডাল একটি টুপি পরেছে এবং i-তম বিডাল বলে "আমাকে বাদ দিয়ে বাকি N-1 টি বিডালের টুপির মাঝে ঠিক A[i] টি ভিন্ন রঙ আছে"। আমাদের লক্ষ্য হলো যাচাই করা যে কি টুপির রঙের এমন কোনো সিকোয়েন্স আছে যা সব বিডালের কথামতো সঠিক।

যেমন, ইনপুট হলে A = [1, 2, 2], তবে আউটপুট হবে True, কারণ যদি বিডাল ১, ২, ৩ যথাক্রমে লাল, নীল, নীল টুপি পরে, তবে সেটি সব বিডালের কথামতো সঠিক।

সমাধানের ধাপসমূহ

এই সমস্যাটি সমাধান করার জন্য নিচের ধাপগুলো অনুসরণ করব:

mn := inf, mx = 0, cnt = 0 n := A-র আকার a অ্যারে সংজ্ঞায়িত করুন আকার (n + 1) i := 1 থেকে n পর্যন্ত: a[i] := A[i - 1] mn := min(mn, a[i]) mx = max(mx, a[i]) i := 1 থেকে n পর্যন্ত: if a[i] == mn, তবে: cnt ১ বাড়িয়ে if mx == mn, তবে: if mn == n - 1 বা 2 * mn <= n, তবে: return true অন্যথায়: return false অন্যথায় যদি mx == mn + 1, তবে: if mn >= cnt এবং n - cnt >= 2 * (mx - cnt), তবে: return true অন্যথায়: return false অন্যথায়: return false

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন আরও ভালো বুঝতে:

#include <bits/stdc++.h> using namespace std; bool solve(vector<int> A) {    int mn = 99999, mx = 0, cnt = 0;    int n = A.size();    vector<int> a(n + 1);    for (int i = 1; i <= n; ++i) {       a[i] = A[i - 1];       mn = min(mn, a[i]), mx = max(mx, a[i]);    }    for (int i = 1; i <= n; ++i)       if (a[i] == mn)          ++cnt;    if (mx == mn) {       if (mn == n - 1 || 2 * mn <= n)          return true;       else          return false;    }    else if (mx == mn + 1) {       if (mn >= cnt && n - cnt >= 2 * (mx - cnt))          return true;       else          return false;    }    else       return false; } int main() { vector<int> A = { 1, 2, 2 }; cout << solve(A) << endl; }

ইনপুট

{ 1, 2, 2 }

আউটপুট

1

  1. C++-এ বাইনারি ট্রি হাইট-ব্যালেন্সড কিনা যাচাই করার প্রোগ্রাম

  2. সি++ STL ব্যবহার করে অ্যারে প্যালিনড্রোম কিনা তা যাচাই করার প্রোগ্রাম

  3. সি++-এ তিনটি বিন্দু সমরৈখিক (collinear) কিনা তা যাচাই করার প্রোগ্রাম

  4. C++ প্রোগ্রাম: প্রাইম সংখ্যা (Prime Number) যাচাই