Skip to content

Instantly share code, notes, and snippets.

@chermehdi
Created August 16, 2018 14:33
Show Gist options
  • Save chermehdi/ea157673a0ff191b2333d0b5859b500c to your computer and use it in GitHub Desktop.
Save chermehdi/ea157673a0ff191b2333d0b5859b500c to your computer and use it in GitHub Desktop.
Minimum scalar product
import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.Random;
import java.io.IOException;
import java.io.InputStream;
/**
* Built using CHelper plug-in Actual solution is at the top
*
* @author MaxHeap
*/
public class Main {
public static void main(String[] args) {
InputStream inputStream = System.in;
OutputStream outputStream = System.out;
InputReader in = new InputReader(inputStream);
PrintWriter out = new PrintWriter(outputStream);
MinimumScalarProduct solver = new MinimumScalarProduct();
int testCount = Integer.parseInt(in.next());
for (int i = 1; i <= testCount; i++) {
solver.solve(i, in, out);
}
out.close();
}
static class MinimumScalarProduct {
public void solve(int testNumber, InputReader in, PrintWriter out) {
int n = in.nextInt();
long[] a = in.nextLongArray(n);
long[] b = in.nextLongArray(n);
ArrayUtils.sort(a);
ArrayUtils.sort(b);
ArrayUtils.reverse(b);
long ans = 0;
for (int i = 0; i < n; i++) {
ans += a[i] * b[i];
}
out.println("Case #" + testNumber + ": " + ans);
}
}
static class InputReader {
private InputStream stream;
private byte[] buf = new byte[1 << 13];
private int curChar;
private int numChars;
public InputReader(InputStream stream) {
this.stream = stream;
}
public int read() {
if (this.numChars == -1) {
throw new UnknownError();
} else {
if (this.curChar >= this.numChars) {
this.curChar = 0;
try {
this.numChars = this.stream.read(this.buf);
} catch (IOException ex) {
throw new InputMismatchException();
}
if (this.numChars <= 0) {
return -1;
}
}
return this.buf[this.curChar++];
}
}
public int nextInt() {
int c;
for (c = this.read(); isSpaceChar(c); c = this.read()) {
}
byte sgn = 1;
if (c == 45) {
sgn = -1;
c = this.read();
}
int res = 0;
while (c >= 48 && c <= 57) {
res *= 10;
res += c - 48;
c = this.read();
if (isSpaceChar(c)) {
return res * sgn;
}
}
throw new InputMismatchException();
}
public long nextLong() {
int c;
for (c = this.read(); isSpaceChar(c); c = this.read()) {
}
byte sgn = 1;
if (c == 45) {
sgn = -1;
c = this.read();
}
long res = 0;
while (c >= 48 && c <= 57) {
res *= 10L;
res += c - 48;
c = this.read();
if (isSpaceChar(c)) {
return res * sgn;
}
}
throw new InputMismatchException();
}
public String next() {
int c;
while (isSpaceChar(c = this.read())) {
}
StringBuilder result = new StringBuilder();
result.appendCodePoint(c);
while (!isSpaceChar(c = this.read())) {
result.appendCodePoint(c);
}
return result.toString();
}
public static boolean isSpaceChar(int c) {
return c == 32 || c == 10 || c == 13 || c == 9 || c == -1;
}
public long[] nextLongArray(int n) {
long[] arr = new long[n];
for (int i = 0; i < n; i++) {
arr[i] = nextLong();
}
return arr;
}
}
static class ArrayUtils {
public static void reverse(long[] arr) {
for (int i = 0; i < arr.length / 2; i++) {
long temp = arr[i];
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = temp;
}
}
public static void sort(long[] arr) {
int n = arr.length;
Random r = new Random();
for (int i = 0; i < n; i++) {
int p = r.nextInt(n + 1);
if (p < n) {
long temp = arr[i];
arr[i] = arr[p];
arr[p] = temp;
}
}
Arrays.sort(arr);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment