Monday, May 31, 2021

Published May 31, 2021 by Anonymous with 0 comment

Minimize sum of product of same-indexed elements of two arrays by reversing a subarray of one of the two arrays

  

import java.io.*;

import java.util.*;

  

public class Main {

  

    

    

    

    static void minimumProdArray(long a[],

                                 long b[], int l)

    {

        long total = 0;

  

        

        for (int i = 0; i < a.length; ++i) {

            total += a[i] * b[i];

        }

  

        long min = Integer.MAX_VALUE;

  

        int first = 0;

        int second = 0;

  

        

        for (int i = 0; i < a.length; ++i) {

  

            int left = i - 1;

            int right = i + 1;

            long total1 = total;

            while (left >= 0 && right < a.length) {

  

                

                total1 -= a[left] * b[left]

                          + a[right] * b[right];

  

                

                total1 += a[left] * b[right]

                          + a[right] * b[left];

  

                

                

                if (min >= total1) {

  

                    min = total1;

                    first = left;

                    second = right;

                }

  

                --left;

                ++right;

            }

        }

  

        

        for (int i = 0; i < a.length; ++i) {

  

            int left = i;

            int right = i + 1;

            long total1 = total;

  

            while (left >= 0 && right < a.length) {

  

                

                total1 -= a[left] * b[left]

                          + a[right] * b[right];

  

                

                total1 += a[left] * b[right]

                          + a[right] * b[left];

  

                

                

                if (min >= total1) {

                    min = total1;

                    first = left;

                    second = right;

                }

  

                

                --left;

                ++right;

            }

        }

  

        

        if (min < total) {

  

            reverse(first, second, a);

  

            

            print(a, b);

        }

  

        else {

            print(a, b);

        }

    }

  

    

    static void reverse(int left, int right,

                        long arr[])

    {

        while (left < right) {

            long temp = arr[left];

            arr[left] = arr[right];

            arr[right] = temp;

            ++left;

            --right;

        }

    }

  

    

    static void print(long a[], long b[])

    {

        int minProd = 0;

  

        for (int i = 0; i < a.length; ++i) {

            System.out.print(a[i] + " ");

        }

        System.out.println();

        for (int i = 0; i < b.length; ++i) {

            System.out.print(b[i] + " ");

            minProd += a[i] * b[i];

        }

        System.out.println();

        System.out.println(minProd);

    }

  

    

    public static void main(String[] args)

    {

        int n = 4;

        long a[] = { 2, 3, 1, 5 };

        long b[] = { 8, 2, 4, 3 };

  

        minimumProdArray(a, b, n);

    }

}

Adblock test (Why?)


Original page link

Best Cool Tech Gadgets

Top favorite technology gadgets
      edit

0 comments:

Post a Comment