zoukankan      html  css  js  c++  java
  • geeksforgeeks@ Find sum of different corresponding bits for all pairs (Bit manipulation)

    http://www.practice.geeksforgeeks.org/problem-page.php?pid=387

    Find sum of different corresponding bits for all pairs

    We define f (X, Y) as number of different corresponding bits in binary representation of X and Y. For example, f (2, 7) = 2, since binary representation of 2 and 7 are 010 and 111, respectively. The first and the third bit differ, so f (2, 7) = 2.

    You are given an array of N integers, A1, A2 ,…, AN. Find sum of f(Ai, Aj) for all pairs (i, j) such that 1 ≤ i, j ≤ N. Return the answer modulo 109+7.

    Input:

    The first line of each input consists of the test cases. The description of T test cases is as follows:

    The first line of each test case contains the size of the array, and the second line has the elements of the array.


    Output:

    In each separate line print sum of all pairs for (i, j) such that 1 ≤ i, j ≤ N and return the answer modulo 109+7.


    Constraints:

    1 ≤ T ≤ 70
    1 ≤ N ≤ 100
    -2,147,483,648 ≤ A[i] ≤ 2,147,483,647


    Example:

    Input:

    2
    2
    2 4
    3
    1 3 5

    Output:

    4
    8

    Working:

    A = [1, 3, 5] 

    We return

    f(1, 1) + f(1, 3) + f(1, 5) +
    f(3, 1) + f(3, 3) + f(3, 5) +
    f(5, 1) + f(5, 3) + f(5, 5) =

    0 + 1 + 1 +
    1 + 0 + 2 +
    1 + 2 + 0 = 8

    import java.util.*;
    import java.lang.*;
    import java.io.*;
    
    class GFG {
        
        public static int difBits(int a, int b) {
            
            int tot = 0;
            
            for(int i=0; i<32; ++i) {
                int mask = (1 << i);
                int ai = (a & mask) >> i;
                int bi = (b & mask) >> i;
                
                tot = (ai == bi)? tot: tot+1;
            }
            
            return tot;
        }
        
        public static int func(int[] arr) {
            
            int n = arr.length;
            int rs = 0;
            
            for(int i=0; i<n; ++i) {
                for(int j=i+1; j<n; ++j) {
                    rs += difBits(arr[i], arr[j]);
                }
            }
            rs *= 2;
            return rs;
        }
        
        public static void main (String[] args) {
            Scanner in = new Scanner(System.in);
            int times = in.nextInt();
            
            for(int i=0; i<times; ++i) {
                int n = in.nextInt();
                int[] arr = new int[n];
                for(int j=0; j<n; ++j) {
                    arr[j] = in.nextInt();
                }
                System.out.println(func(arr));
            }
        }
    }
    View Code
  • 相关阅读:
    gflag使用
    INTERVIEW #2
    Decision Tree
    Java FAQ
    K-Nearest Neighbors
    INTERVIEW #1
    C++ FAQ
    INTERVIEW #0
    Selection Sort
    TCP 3-Way Handshake
  • 原文地址:https://www.cnblogs.com/fu11211129/p/5645219.html
Copyright © 2011-2022 走看看