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

C++ প্রোগ্রাম: প্রিফিক্স যোগফল শূন্য না হওয়া এবং চিহ্ন পরিবর্তনের ন্যূনতম অপারেশন

মান লিখুন: আমাদের কাছে N উপাদান বিশিষ্ট একটি অ্যারে A রয়েছে। প্রতিটি অপারেশনে একটি উপাদান বেছে নিয়ে ১ বাড়ানো বা কমানো যায়। নিচের শর্তগুলো পূরণ করার জন্য ন্যূনতম কত অপারেশন দরকার তা বের করতে হবে:

  • প্রতিটি i (1 থেকে n) এর জন্য, ১ম থেকে i-তম পদ পর্যন্ত যোগফল ০ নয়
  • প্রতিটি i (1 থেকে n-1) এর জন্য, ১ম থেকে i-তম পদ পর্যন্ত যোগফলের চিহ্ন, ১ম থেকে (i+1)-তম পদ পর্যন্ত যোগফলের চিহ্ন থেকে ভিন্ন

উদাহরণ

যদি ইনপুট হয় A = [1, -3, 1, 0], তবে আউটপুট হবে 4, কারণ ১, -২, ২, -২ এভাবে রূপান্তর করতে ৪ অপারেশন লাগে। প্রিফিক্স সমগুলো ১, -১, ১, -১।

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

n := A এর আকার
ret := 0, sum := 0
for each ai in A:
    nsum := sum + ai
    যদি s > 0:
        যদি nsum <= 0:
            ret := ret + |nsum| + 1
            ai := ai + |nsum| + 1
    অন্যথায়:
        যদি nsum >= 0:
            ret := ret + nsum + 1
            ai := ai - (nsum + 1)
    sum := sum + ai
    s := s * -1
ret রিটার্ন করুন

C++ বাস্তবায়ন

#include <bits/stdc++.h>
using namespace std;

int util(vector<int> A, int s) {
    int n = A.size();
    int ret = 0;
    int sum = 0;
    for (int ai : A) {
        int nsum = sum + ai;
        if (s > 0) {
            if (nsum <= 0) {
                ret += abs(nsum) + 1;
                ai = ai + abs(nsum) + 1;
            }
        } else {
            if (nsum >= 0) {
                ret += nsum + 1;
                ai = ai - (nsum + 1);
            }
        }
        sum += ai;
        s *= -1;
    }
    return ret;
}

int solve(vector<int> A) {
    int res = min(util(A, 1), util(A, -1));
    return res;
}

int main() {
    vector<int> A = { 1, -3, 1, 0 };
    cout << solve(A) << endl;
}

ইনপুট

{ 1, -3, 1, 0 }

আউটপুট

4
  1. C++-এ ১ থেকে k পর্যন্ত সব সংখ্যা তৈরি করতে কতগুলো সংখ্যা যুক্ত করতে হবে তা গণনা করার প্রোগ্রাম

  2. সি++-এ দিয়ে সংখ্যা কমিয়ে ০-এর নিচে আনতে প্রয়োজনীয় অপারেশন গণনা

  3. C++-এ দুটি সংখ্যার কমন ডিভাইজর (Common Divisors of Two Numbers)

  4. C++ প্রোগ্রাম: প্রিফিক্স এক্সপ্রেশন থেকে এক্সপ্রেশন ট্রি তৈরি করা