题目描述:N个段落 P个页面 W的段长 H的页长 一个数组给出每个段落的字数 目标找到符合要求的最大字符大小。
难点:(1)必须根据题目的描述,给出符合条件的字符输入方案;
(2)使用二分法不断逼近可选择的最大字符大小;
(3)如何利用判断表达式实现取整,和选择;
重要思想:最令人迷茫的地方在于,字符和段和页面之间的关系;必须要看清他们之间的层次关系;字符分割统计出段,段统计分割出现页面。利用页面的比较产生可行的结果。
1 package shounue; 2 import java.util.Scanner; 3 public class FontSize { 4 public static void main(String[] args) { 5 Scanner cin = new Scanner(System.in); 6 int number = cin.nextInt(); 7 while (number > 0){ 8 int n = cin.nextInt(); 9 int p = cin.nextInt();10 int w = cin.nextInt();11 int h = cin.nextInt();12 int[] array = new int[n];13 for (int i = 0;i < n;i++){14 array[i] = cin.nextInt();15 }16 int left = 1;17 int right = Math.min(w, h);18 int result = 0;19 while (left <= right){20 int mid = (left + right) / 2;21 int column = w / mid;22 int row = h / mid;23 int count = 0;24 for (int i = 0;i < n;i++){25 count += ((array[i]%column) == 0 ? (array[i]/column) : (array[i]/column + 1));26 }27 int page = ((count%row) == 0 ? (count/row) : (count/row + 1));28 if (page <= p){29 result = mid;30 left = mid + 1;31 }else {32 right = mid - 1;33 }34 }35 System.out.println(result);36 number--;37 }38 }39 40 }