• + 0 comments

    Java 8 solution:

    import java.io.*;
    import java.math.*;
    import java.security.*;
    import java.text.*;
    import java.util.*;
    import java.util.concurrent.*;
    import java.util.function.*;
    import java.util.regex.*;
    import java.util.stream.*;
    import static java.util.stream.Collectors.joining;
    import static java.util.stream.Collectors.toList;
    
    class Result {
    
        /*
         * Complete the 'winningLotteryTicket' function below.
         *
         * The function is expected to return a LONG_INTEGER.
         * The function accepts STRING_ARRAY tickets as parameter.
         */
    
        public static long winningLotteryTicket(List<String> tickets) {
            // Write your code here
            long[] freq = new long[1024]; 
            long answer = 0;
    
            for (String s : tickets) {
                int output = Freq_to_Decimal(s); 
                freq[output]++;
            }
            for (int i = 0; i < 1024; i++) {
                for (int j = i; j < 1024; j++) {
                    if ((i | j) == 1023) {
                        if (i == j) {
                            answer += (freq[i] * (freq[i] - 1)) / 2;
                        } else {
                            answer += freq[i] * freq[j];
                        }
                    }
                }
            }
    
            return answer;
        }
        static int Freq_to_Decimal(String s) {
            int ans = 0;
            for (char c : s.toCharArray()) {
                int bit = c - '0'; 
                ans = ans | (1 << (9 - bit)); 
            }
            return ans;
        }
    }
    
    public class Solution {
        public static void main(String[] args) throws IOException {
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
    
            int n = Integer.parseInt(bufferedReader.readLine().trim()); 
    
            List<String> tickets = IntStream.range(0, n).mapToObj(i -> {
                try {
                    return bufferedReader.readLine();
                } catch (IOException ex) {
                    throw new RuntimeException(ex);
                }
            })
            .collect(toList()); 
            long result = Result.winningLotteryTicket(tickets); 
    
            bufferedWriter.write(String.valueOf(result)); 
            bufferedWriter.newLine();
    
            bufferedReader.close();
            bufferedWriter.close();
        }
    }