微软2016校园招聘4月在线笔试题解(一)
- 字母是方的,即宽高一样。
- 每页至少要显示一个字母,才能有解。即字母大小size = min(W, H)。
- 每行至多可以显示row = W / size个字母,注意下取整。
- 一个段包含p个字母的段,至少需要占用require = (p + row - 1) / row行。
代码:
#include <iostream>
#include<vector>
using namespace std;
int FrontSize(int &N,int &P,int &W,int &H,vector<int>&A)
{
int size=min(W,H);
while(size>=1)
{
int row=W/size;
int col=H/size;
int linecnts=0;
for(vector<int>::iterator it=A.begin();it<A.end();++it)
{
linecnts+=(*it+row-1)/row;//每段占多少行
}
if(linecnts<=P*col)//P*col总共的行数
return size;
else
size--;
}
return 0;
}
int main(int argc, char *argv[])
{
int num;
cin>>num;
while(num>0)
{
int N,P,W,H;
cin>>N>>P>>W>>H;
vector<int> A(N);
for(int i=0;i<N;++i)
cin>>A[i];
cout<<FrontSize(N,P,W,H,A)<<endl;
num--;
}
return 0;
}
参考:http://www.gotit.sinaapp.com/wei-ruan-2016xiao-yuan-zhao-pin-4yue-zai-xian-bi-shi-ti-jie-yi.html