【hihoCoder】1288 : Font Size

题目:http://hihocoder.com/problemset/problem/1288

手机屏幕大小为 W(宽) * H(长),一篇文章有N段,每段有ai个字,要求使得该文章占用的页数不超过P的字体最大值S。

思路:

1. 最大的字体:一页只放一个字,则S = min(W, H)

2. 枚举方式:对于每一个S,计算需要的行数,然后判断页数是否超过P

注意点:

1. 如果一段文字的最后一行没有被填满,下一段文字也必须从下一行开始。

2. 关于ceil和floor函数

  • 需要包含头文件 #include <math.h>
  • 参数类型应该为double。如果是个计算式子,要注意类型转换
int a, b;
ceil(a/b);//结果不正确,因为a/b已经被截断,成为int型的数
ceil(a/(double) b);//ceil里面的值是个double类型

3. a / (b / c) 不一定等于 a / b * c 

源码

 1 #include <iostream>
 2 #include <math.h>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int cnt, N, P, W, H, a, S;
 8     int as[1001];
 9     cin >> cnt;
10     while (cnt-- > 0)
11     {
12         cin >> N >> P >> W >> H;
13         a = 0;
14         
15         for (int i = 0; i < N; i++)
16             cin >> as[i];
17         int max = W>H ? H : W;//最大的字体大小,一页只放一个字
18         for (int i = max;; i--)
19         {
20             int lines = 0;//需要多少行
21             int perline = W / i;//一行可以放几个字
22             for (int a_i = 0; a_i < N; a_i++)
23                 lines += ceil(as[a_i] / (double)perline);
24             if (ceil(lines / (H / i)) <= P)
25             {
26                 cout << i << endl;
27                 break;
28             }
29         }
30     }
31     return 0;
32 }
View Code
posted @ 2016-09-25 10:53  huapyuan  阅读(386)  评论(0编辑  收藏  举报