您的位置:首页 > 其它

微软2016校园招聘4月在线笔试 A FontSize

2016-04-07 10:06 441 查看
题目链接:http://hihocoder.com/problemset/problem/1288

分析:题目中所求的是最大的FontSize(记为S),其应该满足P*[W/S]*[H/S] >= Sum,其中Sum是字符的总数。但是我们也要注意,段与段之间不能在同一行,所以根据上面公式求出来的S不一定满足条件,还要对其进行检验。下面是我的代码。

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;

int num[1001];
int N , P, W,H;

bool check(int font,int N ,int p){

int page = 0 , line = 0;

int lc = W/font;
int wc = H/font;

for(int i = 0 ; i < N ; i ++){
line += num[i]/lc;
if(num[i]%lc) line ++;
}

page = line/wc;
if(line%wc) page ++;

return (page<=p);
}

int main()
{
int cas,lines;
scanf("%d",&cas);
while(cas --)
{
scanf("%d%d%d%d",&N,&P,&W,&H);
int sum = 0;

for(int i = 0 ; i < N ; i ++){

scanf("%d",&num[i]);
sum += num[i];
}

double cc = (double)1/sum * P*W*H;
int font = sqrt(cc) + 1;

int lc = H/font ;
int wc = W/font ;

while(P*lc*wc < sum || !check(font,N,P)){
font --;
lc = H/font ;
wc = W/font ;
}
printf("%d\n",font );
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: