hihoCoder #1288 : Font Size
Posted yunners
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hihoCoder #1288 : Font Size相关的知识,希望对你有一定的参考价值。
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
题目的大概意思就是
史蒂文·爱在手机上读书。 他现在阅读的书包含N个段落,第i个段落包含ai字符。史蒂文想使字符更易于阅读,因此他决定增加字符的字体大小。 但史蒂文(Steven)的手机屏幕尺寸有限。 其宽度为W,高度为H。因此,如果字符的字体大小为S,则它只能在一行中显示⌊W/S⌋个字符,而在页面中仅显示⌊H/S⌋行。(⌊x⌋是不超过x的最大整数)因此,这里的问题是,如果史蒂文想控制页数不超过P,那么他可以设置的最大字体大小是多少? 请注意,段落必须以换行开头,并且段落之间没有空行。
输入可能包含多个测试用例。第一行是一个整数任务,表示测试用例的数量。对于每个测试用例,第一行包含四个整数N、P、W和H,如上所述。第二行包含N个整数a1 a2…表示每个段落中的字符数。
输出可以设置的最大字体大小。
样例输入:
2 1 10 4 3 10 2 10 4 3 10 10
样例输出:
3 2
代码如下:
#include<stdio.h> #include<string.h> main() { int N; scanf("%d",&N); int i,j,accum[N],data[N][999],n[N],p[N],w[N],h[N],flag=1; memset(accum,0,sizeof(accum)); memset(data,0,sizeof(data)); for(i=0;i<N;i++) { scanf("%d%d%d%d",&n[i],&p[i],&w[i],&h[i]); for(j=0;j<n[i];j++) { scanf("%d",&data[i][j]); accum[i]+=data[i][j]; } } for(i=0;i<N;i++) { int size=w[i]>h[i]?h[i]:w[i]; for(;size>=1;size--) { int row=h[i]/size;//行数 int column=w[i]/size;//列数 int total_row=row*p[i];//总行数 int accum=0;//使用的行数 flag=1; for(j=0;j<999&&data[i][j]!=0;j++) { int temp=data[i][j]/column; accum+=temp; if(temp*column<data[i][j]) accum++; if(accum>total_row) flag=0; } if(flag)break; } if(flag) printf("%d ",size); else printf("0 "); } }
以上是关于hihoCoder #1288 : Font Size的主要内容,如果未能解决你的问题,请参考以下文章
HUD 1288 Hat's Tea(反向的贪心,非常好的一道题)