import java.io.*; import java.util.*; public class tidal { public static int[] getTimeRange(BufferedReader in, int maxDays) throws Exception { int maxTime = maxDays*24*60*60; int time = 0; StringTokenizer t = new StringTokenizer(in.readLine(), ": "); time = 60*60*Integer.parseInt(t.nextToken())+ 60*Integer.parseInt(t.nextToken())+ Integer.parseInt(t.nextToken()); int interval = 60*60*Integer.parseInt(t.nextToken())+ 60*Integer.parseInt(t.nextToken())+ Integer.parseInt(t.nextToken()); int nEntries = (maxDays*24*60*60)/interval+1; System.err.println(nEntries+" from "+time+" every "+interval); int[] times = new int[nEntries]; for(int i=0;i0 || nDays > 1) for(int i=0;i dockOpen[dock][day]) dockOpen[dock][day] = tides[tideI]+tideHours*60*60; tideI++; } if(tides[tideI]-tideHours*60*60 < dockOpen[dock][day]) dockOpen[dock][day] = tides[tideI]+tideHours*60*60; dockClosed[dock][day] = sunset[day]; while(tides[tideI] < sunset[day]){ if(tides[tideI]+tideHours*60*60 > dockClosed[dock][day]) dockClosed[dock][day] = tides[tideI]-tideHours*60*60; tideI++; } if(tides[tideI]-tideHours*60*60 < dockClosed[dock][day]) dockClosed[dock][day] = tides[tideI]-tideHours*60*60; } } for(int day = 0;day= maxDays) continue; for(int day = arrivalDay[dock]+1;day < maxDays;day++){ int startTime = dockOpen[dock][day]; System.err.println("STARTED AT DOCK "+dock+" on day "+day); for(int dest = dock+1;dest dockClosed[dest][day]) destTime = 0; if( (destTime - startTime)*speed + dockDistance[dock] >= dockDistance[dest] && day <= arrivalDay[dest]){ System.err.println("can reach "+dest+ "start = "+startTime+" destTime = "+ destTime+" dist traveled "+ ((destTime-startTime)*speed)+ " = pos "+ ((destTime - startTime)*speed + dockDistance[dock])+ " >= "+dockDistance[dest]); arrivalDay[dest] = day; pred[dest] = dock; } else{ if(day > arrivalDay[dest]) System.err.println("can get to dock "+dest+" earlier"); else System.err.println("destTime "+destTime+" startTime "+startTime+ " start "+dockDistance[dock] +" = "+ ((destTime - startTime)*speed + dockDistance[dock])+ " < goal "+dockDistance[dest]); } } } } arrivalDay[0] = 0; System.err.print("ARRIVAL VECTOR: "); for(int i=0;i= maxDays){ System.out.println("NO ITINERARY POSSIBLE"); continue; } recurseDock(pred, dockN-1, Integer.MAX_VALUE, arrivalDay); System.out.println(); } } }