Cod sursa(job #3287118)

Utilizator lucky1992Ion Ion lucky1992 Data 15 martie 2025 22:19:14
Problema Transport Scor 40
Compilator java Status done
Runda Arhiva de probleme Marime 1.36 kb
import java.io.*;
import java.util.Scanner;

public class Main {

  public static int checkCapacity(int[] v, int totalCapacity) {
    int k = 1;
    int currentCapacity = v[1];
    for (int i = 2; i < v.length; i++) {
      if (currentCapacity + v[i] > totalCapacity) {
        k++;
        currentCapacity = v[i];
      } else {
        currentCapacity += v[i];
      }
    }
    return k;
  }

  public static int binarySearch(int[] v, int low, int high, int k) {
    int mid, res = -1;
    while (low <= high) {
      mid = (low + high) >>> 1;

      int nrTransport = checkCapacity(v, mid);
      if (nrTransport <= k) {
        res = mid;
        high = mid - 1;
      } else { // k < nrTransport
        low = mid + 1;
      }
    }
    return res;
  }

  public static void main(String[] args) throws FileNotFoundException {
    try (Scanner scanner = new Scanner(new FileInputStream("transport.in"));
         PrintWriter pw = new PrintWriter(new FileOutputStream("transport.out"))) {
      int N = scanner.nextInt();
      int k = scanner.nextInt();

      int[] v = new int[N+1];

      int min = Integer.MIN_VALUE;
      int max = 0;
      for (int i = 1; i <= N; i++) {
        v[i] = scanner.nextInt();
        max += v[i];
        if (v[i] >= min) {
          min = v[i];
        }
      }

      //int max = 16000 * N;

      pw.println(binarySearch(v, min, max, k));

    }
  }
}