দুটি অ্যারে A এবং B দেওয়া আছে n উপাদানের। একটি অপারেশন: দুটি ইন্ডেক্স i, j বেছে নিন, i-তম উপাদান ১ কমান, j-তম উপাদান ১ বাড়ান। অপারেশনের পর সব উপাদান নন-নেগেটিভ থাকতে হবে। A এবং B সমান করতে হবে। অপারেশন সিকোয়েন্স বের করতে হবে। অসম্ভব হলে -1।
উদাহরণ
A=[1,2,3,4], B=[3,1,2,4] → আউটপুট: [(1,0), (2,0)]
ব্যাখ্যা: i=1,j=0 দিয়ে [2,1,3,4], তারপর i=2,j=0 দিয়ে [3,1,2,4]।
সমাধানের ধাপসমূহ
a:=0, b:=0, c:=0
n := A.size()
C[n] := {0}
for i:=0 to n-1: a += A[i]
for i:=0 to n-1: b += B[i]
if a != b: return -1
else:
for i:=0 to n-1:
c += |A[i]-B[i]|
C[i] = A[i]-B[i]
c /= 2
i:=0, j:=0
while c--:
while C[i]<=0: i++
while C[j]>=0: j++
print i, j
C[i]--, C[j]++
সি++ কোড উদাহরণ
#include <bits/stdc++.h>
using namespace std;
void solve(vector<int> A, vector<int> B) {
int a=0, b=0, c=0, n=A.size();
vector C(n,0);
for (int i=0;i=0) j++;
cout << "(" << i << ", " << j << "), ";
C[i]--, C[j]++;
}
}
int main() {
vector A = {1,2,3,4};
vector B = {3,1,2,4};
solve(A,B);
}
ইনপুট
{ 1, 2, 3, 4 }, { 3, 1, 2, 4 }
আউটপুট
(1, 0), (2, 0),