/* Subject: Contest submission for problem #3, file 3.java */ /* kelvinso@imail.EECS.Berkeley.EDU */ /* Wed Sep 10 20:52:39 PDT 2003 */ /*___CONTEST_SUBMISSION___ kelvinso 3 */ import java.io.InputStream; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.StreamTokenizer; import java.util.LinkedList; import java.util.ListIterator; import java.util.Hashtable; import java.util.Enumeration; import java.lang.Double; class P3 { public static void main(String[] arg) throws Exception{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StreamTokenizer streamTokenizer = new StreamTokenizer(in); LinkedList listOfWindows = new LinkedList(); streamTokenizer.nextToken(); Double width = new Double(streamTokenizer.nval); streamTokenizer.nextToken(); Double height = new Double(streamTokenizer.nval); Window window = new Window(1, width.intValue(), height.intValue(), 0, 0); listOfWindows.addLast(window); while (streamTokenizer.nextToken() != StreamTokenizer.TT_EOF) { Double newWindow = new Double(streamTokenizer.nval); streamTokenizer.nextToken(); Double parentWindow = new Double(streamTokenizer.nval); streamTokenizer.nextToken(); Double dimension = new Double(streamTokenizer.nval); streamTokenizer.nextToken(); String placement = streamTokenizer.sval; ListIterator iterator = listOfWindows.listIterator(); Window parent = new Window(1, 0, 0, 0 , 0 ); while(iterator.hasNext()) { parent = (Window) iterator.next(); if(parent.myNumber == parentWindow.intValue()) break; } Window newWin = new Window(1, 0, 0, 0, 0); if(placement.equals("T")){ newWin = new Window(newWindow.intValue(), parent.freeRTX-parent.freeLBX, dimension.intValue(), parent.freeLBX, parent.freeRTY-dimension.intValue()); parent.freeRTY -= dimension.intValue(); } else if (placement.equals("B")) { newWin = new Window(newWindow.intValue(), parent.freeRTX-parent.freeLBX, dimension.intValue(), parent.freeLBX, parent.freeLBY); parent.freeLBY += dimension.intValue(); } else if (placement.equals("L")) { newWin = new Window(newWindow.intValue(), dimension.intValue(), parent.freeRTY-parent.freeLBY, parent.freeLBX, parent.freeLBY); parent.freeLBX += dimension.intValue(); } else if (placement.equals("R")) { newWin = new Window(newWindow.intValue(), dimension.intValue(), parent.freeRTY-parent.freeLBY, parent.freeRTX - dimension.intValue(), parent.freeLBY); parent.freeRTX -= dimension.intValue(); } listOfWindows.addLast(newWin); } ListIterator iterator = listOfWindows.listIterator(); while(iterator.hasNext()) { Window parent = (Window) iterator.next(); System.out.println(parent.myNumber + ". " + parent.width + "x" + parent.height + " @ (" + parent.startingX + "," + parent.startingY + ")"); } } } class Window { public int myNumber; public int height; public int width; public int freeLBX; public int freeLBY; public int freeRTX; public int freeRTY; public int startingX; public int startingY; public Window(int n, int w, int h, int sX, int sY) { myNumber = n; width = w; height = h; startingX = sX; startingY = sY; freeLBX = sX; freeLBY = sY; freeRTX = sX+w; freeRTY = sY+h; } }