Untitled

 avatar
unknown
plain_text
6 months ago
1.8 kB
5
Indexable
import java.util.*;
import java.io.*;

public class Main {

    // Method to find the missing and repeated numbers
    public static int[] findMissing(int N, int[] A) {
        long expected_sum = (long) N * (N + 1) / 2;
        long expected_square_sum = (long) N * (N + 1) * (2 * N + 1) / 6;
        
        long actual_sum = 0;
        long actual_square_sum = 0;
        
        // Calculate actual sum and sum of squares
        for (int i = 0; i < N; i++) {
            actual_sum += A[i];
            actual_square_sum += (long) A[i] * A[i];
        }
        
        // Calculate the differences
        long sum_diff = expected_sum - actual_sum; // missing - repeated
        long square_sum_diff = expected_square_sum - actual_square_sum; // missing^2 - repeated^2
        
        // Calculate missing + repeated using (missing^2 - repeated^2) / (missing - repeated)
        long sum_plus_diff = square_sum_diff / sum_diff;
        
        // Find missing and repeated numbers
        int missing = (int) ((sum_diff + sum_plus_diff) / 2);
        int repeated = (int) (sum_plus_diff - missing);
        
        // Return the result in increasing order
        return new int[] {Math.min(repeated, missing), Math.max(repeated, missing)};
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // Reading input
        int N = sc.nextInt();
        int[] A = new int[N];
        for (int i = 0; i < N; i++) {
            A[i] = sc.nextInt();
        }
        
        sc.close();
        
        // Finding the missing and repeated numbers
        int[] result = findMissing(N, A);
        
        // Output the result in increasing order
        System.out.print(result[0] + " " + result[1]);
    }
}
Editor is loading...
Leave a Comment