fork download
  1. //binary search+minimization problem
  2.  
  3. import java.io.*;
  4. import java.util.*;
  5.  
  6. class Main {
  7. public static void main(String[] args)throws IOException {
  8. int n=Integer.parseInt(br.readLine());
  9. int[] arr=new int[n];
  10. for(int i=0;i<n;i++){
  11. arr[i]=Integer.parseInt(br.readLine());
  12. }
  13. int k=Integer.parseInt(br.readLine());
  14. if(n<k) System.out.println(-1);
  15. else{
  16. int high=0, low=Integer.MAX_VALUE;
  17. for(int i=0;i<n;i++){
  18. high+=arr[i];
  19. low=(arr[i]<low)?arr[i]:low;
  20. }
  21. int ans=Integer.MAX_VALUE;
  22. int mid=(low+high)/2;
  23. int flag=0;
  24. while(low<=high){
  25. int[] students=new int[k];
  26. Arrays.fill(students,0);
  27. int i=0,ind=0;
  28. mid=(low+high)/2;
  29. for(i=0,ind=0;i<k;i++){
  30. while(ind<n&&students[i]+arr[ind]<=mid){
  31. students[i]+=arr[ind];
  32. if(students[i]==mid) flag=1;
  33. ind++;
  34. }
  35. }
  36. if(flag==1&&ind==n){
  37. ans=mid;
  38. high=mid-1;
  39. }
  40. else if(flag==1&&ind<n){
  41. low=mid+1;
  42. }
  43. else if(flag==0&&ind==n){
  44. high=mid-1;
  45. }
  46. else if(flag==0&&ind<n){
  47. low=mid+1;
  48. }
  49. else break;
  50. }
  51. if(ans==Integer.MAX_VALUE) System.out.println(-1);
  52. else System.out.println(ans);
  53. }
  54. return;
  55. }
  56. }
Success #stdin #stdout 0.07s 52988KB
stdin
4
12
34
67
90
2
stdout
113