source:
题意:这是2017中国大学生程序设计竞赛网络选拔赛的题5。说在一个坐标格上画封闭的图形,可以画x,y轴的单位长度的边,也可以画其对应的对角线,现给出一个面积,问至少要画几条边才能使框出的图形面积大于等于给出的面积。
思路:这是一道找规律题目,画画图就知道,首先是极大值必是对角线构成的菱形,也即边长为1个对角线的菱形(4画)面积为2*1²,边长为2个对角线的菱形(8画)面积为2*2²....这样就粗略框出来一个模4的面积范围,而对于模4余1,2,3的中间状态,可以画图推出减少详见代码
代码如下:
#include <stdio.h>
#include<math.h>
using namespace std;
int main() {
int T,s,ans,m;
scanf("%d",&T);
for(int t=0;t<T;t++)
{
scanf("%d",&s);
int j=sqrt((double)s/2.0);
if(s<=2) printf("4\n");
else if(j*j*2==s) printf("%d\n",j*4);
else
{
j=j+1;
m=j*j*2;
if(2*m-2*j-1<2*s) printf("%d\n",j*4);
else if(2*m-4*j<2*s) printf("%d\n",j*4-1);
else if(2*m-6*j-1<2*s) printf("%d\n",j*4-2);
else printf("%d\n",j*4-3);
}
}
return 0;
}