本文主要是介绍Codeforce 53B,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
链接:点击打开链接
题意:给出一个h和w的上限,找出一个h和w使得0.8=<h/w<=1.25,并且使h*w最大,如果h*w相等输出h较大的
代码:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include<algorithm>
using namespace std;
int main(){
long long i,j,h,w,tmp_h,tmp_w;
cin>>h>>w;
for(i=0;;i++){
if((long long)(1<<i)>h||(long long)(1<<i)>(5*w)/4){
i--;
break;
}
}
for(j=0;;j++){
if((long long)(1<<j)>w||(long long)(1<<j)>(5*h)/4){
j--;
break;
}
}
i=1<<i;
j=1<<j; //求出2的几次幂的最大的h和w
tmp_h=min(j*5/4,h); //求出满足条件的最大h和w
tmp_w=min(i*5/4,w);
if(i*tmp_w>j*tmp_h)
cout<<i<<" "<<tmp_w<<endl;
else if(i*tmp_w<j*tmp_h)
cout<<tmp_h<<" "<<j<<endl;
else
cout<<max(i,tmp_h)<<" "<<min(j,tmp_w)<<endl;
return 0;
}
这篇关于Codeforce 53B的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!