标签:
题目描述: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 }
标签:
原文地址:http://www.cnblogs.com/ProWhalen/p/5361653.html