import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; import java.util.List; public class Most { /** * @param args the command line arguments */ /* public static void main(String[] args) throws Exception { doMain(System.in); }d * */ public static void main(String[] args) throws Exception { //doMain(new FileInputStream(new File("testData"))); doMain(System.in); } private static void doMain(InputStream is) throws Exception { List> data = new ArrayList>(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line; while ((line = reader.readLine()) != null) { if (!line.isEmpty()) { LinkedList ints = readLine(line); data.add(ints); } } reader.close(); doMost(data); } private static LinkedList readLine(String s) { String[] arr = s.split(" "); LinkedList list = new LinkedList(); for (String a : arr) { if (!a.isEmpty()) { list.add(Integer.parseInt(a)); } } return list; } private static void testPrint(Collection s) { for (Object any : s) { System.out.println(any); } } private static void doMost(List> data) { int line = 0; int instanceCount = data.get(line++).get(0); for (int i = 0; i < instanceCount; i++) { int instanceHeight = data.get(line++).get(0); List> instanceData = data.subList(line, line + instanceHeight); line = line + instanceHeight; doMostInstance(instanceData); } } private static void doMostInstance(List> data) { int instanceMin = Integer.MAX_VALUE; List diffs = new ArrayList(); Min min = new Min(); for (List pair : data) { diffs.add(min.min(pair.get(1) - pair.get(0))); } int num = 0; outer: for (List pair : data) { for (int i = Math.max(0, num - min.getMin()); i < Math.min(pair.size(), num + min.getMin()); i++) { min.min((data.get(i).get(1) - pair.get(0)) + Math.abs(i) - 1); //B if (min.getMin() == 0) { break outer; } } num++; } System.out.println("K prechodu reky je treba " + min.getMin() + " pontonu."); } private static class Min { int instanceMin = Integer.MAX_VALUE; private int min(int a) { instanceMin = Math.min(a, instanceMin); return instanceMin; } private int getMin() { return instanceMin; } } }