Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.PrintWriter;
- import java.util.StringTokenizer;
- public class checklist {
- public static void main(String[]args) throws Exception {
- BufferedReader b = new BufferedReader(new FileReader("checklist.in"));
- StringTokenizer s = new StringTokenizer(b.readLine());
- PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("checklist.out")));
- int H = Integer.parseInt(s.nextToken());
- int G = Integer.parseInt(s.nextToken());
- Pair[] hPairs = new Pair[H + 1];
- Pair[] gPairs = new Pair[G + 1];
- for(int i = 1; i <= H; i++) {
- s = new StringTokenizer(b.readLine());
- hPairs[i] = new Pair(Integer.parseInt(s.nextToken()), Integer.parseInt(s.nextToken()));
- }
- for(int i = 1; i <= G; i++) {
- s = new StringTokenizer(b.readLine());
- gPairs[i] = new Pair(Integer.parseInt(s.nextToken()), Integer.parseInt(s.nextToken()));
- }
- int[][][] dp = new int[H+1][G+1][2];
- // initialization
- // set to large number because if you are at 1, 1 you cannot be at H because that would mean you started from G
- dp[1][1][0] = distance(hPairs[1], gPairs[1]);
- dp[0][1][1] = 10000;
- dp[0][0][1] = 10000;
- dp[0][1][0] = 10000;
- dp[0][0][0] = 0;
- dp[1][0][0] = 0;
- dp[1][0][1] = 10000;
- dp[1][1][1] = distance(hPairs[1], gPairs[1]);
- // when h = 1
- for(int g = 2; g <= G; g++) {
- dp[1][g][1] = dp[1][g - 1][1] + distance(gPairs[g], gPairs[g - 1]);
- dp[1][g][0] = 10000;
- }
- for(int h = 2; h <= H; h++) {
- dp[h][1][0] = dp[h - 1][1][0] + distance(hPairs[h], hPairs[h - 1]);
- dp[h][1][1] = 10000;
- }
- // 0 = currently at h, 1 = currently at g
- for(int h = 2; h <= H; h++) {
- for(int g = 2; g <= G; g++) {
- dp[h][g][0] = Math.min(dp[h -1][g][0] + distance(hPairs[h - 1], hPairs[h]),
- dp[h -1][g][1] + distance(hPairs[h], gPairs[g]));
- dp[h][g][1] = Math.min(dp[h][g - 1][0] + distance(gPairs[g], hPairs[h]),
- dp[h][g - 1][1] + distance(gPairs[g - 1], gPairs[g]));
- }
- }
- for(int[][] arr: dp) {
- for(int[] arr2: arr) {
- System.out.print("(");
- for(int i : arr2) {
- System.out.print(i + ", ");
- }
- System.out.print(")");
- }
- System.out.println();
- }
- System.out.println(dp[H][G][0]);
- out.close();
- }
- static int distance(Pair a, Pair b) {
- return (int)Math.pow(a.x - b.x, 2) + (int)Math.pow(a.y - b.y, 2);
- }
- static int min(int a, int b, int c, int d) {
- return Math.min(a, Math.min(b, Math.min(c, d)));
- }
- static class Pair {
- int x, y;
- public Pair(int x, int y) {
- this.x = x;
- this.y = y;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement