Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import java.io.*;
- public class radio {
- static char[] fj;
- static char[] bessie;
- static long[][] dp;
- public static void main(String[] args) throws IOException {
- BufferedReader br = new BufferedReader(new FileReader("radio.in"));
- PrintWriter pw = new PrintWriter(new FileWriter("radio.out"));
- StringTokenizer st = new StringTokenizer(br.readLine());
- int f = Integer.parseInt(st.nextToken());
- int b = Integer.parseInt(st.nextToken());
- st = new StringTokenizer(br.readLine());
- int fjx = Integer.parseInt(st.nextToken());
- int fjy = Integer.parseInt(st.nextToken());
- st = new StringTokenizer(br.readLine());
- int bx = Integer.parseInt(st.nextToken());
- int by = Integer.parseInt(st.nextToken());
- st = new StringTokenizer(br.readLine());
- String fjs = st.nextToken();
- fj = new char[f+1];
- for(int x = 0; x<f; x++)
- fj[x] = fjs.charAt(x);
- st = new StringTokenizer(br.readLine());
- String bs = st.nextToken();
- bessie = new char[b+1];
- for(int x = 0; x<b; x++)
- bessie[x] = bs.charAt(x);
- dp = new long[fj.length][bessie.length];
- rev(fj);
- rev(bessie);
- //pw.println(Arrays.toString(fj) + " " + Arrays.toString(bessie));
- for(long[] k : dp){
- Arrays.fill(k,-1);
- }
- pw.println(solve(fj.length-1, bessie.length-1, fjx, fjy, bx, by));
- pw.close();
- }
- public static long solve(int i, int j, int fx, int fy, int bx, int by){
- if(dp[i][j] > -1)
- return dp[i][j];
- if(i == 0 && j == 0){
- return 0;
- }
- int dxf = 0;
- int dyf = 0;
- int dxb = 0;
- int dyb = 0;
- if(fj[i] == 'N')
- dyf = 1;
- if(fj[i] == 'S')
- dyf = -1;
- if(fj[i] == 'W')
- dxf = -1;
- if(fj[i] == 'E')
- dxf = 1;
- if(bessie[j] == 'N')
- dyb = 1;
- if(bessie[j] == 'S')
- dyb = -1;
- if(bessie[j] == 'W')
- dxb = -1;
- if(bessie[j] == 'E')
- dxb = 1;
- if(i == 0){
- return dp[i][j] = dist(fx,fy,bx+dxb,by+dyb) + solve(i,j-1,fx,fy,bx+dxb,by+dyb);
- }
- if(j == 0){
- return dp[i][j] = dist(fx+dxf, fy+dyf, bx,by) + solve(i-1,j,fx+dxf, fy+dyf, bx,by);
- }
- return dp[i][j] = Math.min(dist(fx+dxf,fy+dyf,bx,by) + solve(i-1,j,fx+dxf,fy+dyf,bx,by), Math.min(dist(fx+dxf,fy+dyf,bx + dxb,by + dyb) + solve(i-1,j-1,fx+dxf,fy+dyf,bx+dxb,by+ dyb),
- dist(fx,fy,bx + dxb,by + dyb) + solve(i,j-1,fx,fy,bx+dxb,by+ dyb)));
- }
- public static long dist(int x1, int y1, int x2, int y2){
- return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
- }
- public static void rev(char[] arr){
- char[] temp = new char[arr.length];
- for(int x = arr.length-1; x>=0; x--){
- temp[arr.length-1-x] = arr[x];
- }
- for(char k = 0; k < arr.length; k++){
- arr[k] = temp[k];
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement