Untitled
unknown
plain_text
10 months ago
1.8 kB
6
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