题目
http://acm.hdu.edu.cn/showproblem.php?pid=6154
题意
在笛卡尔坐标系下,画一个面积至少为 nn 的简单多边形,每次只能画一条边或者一个格子的对角线,问至少要画几条。
分析
至少 4 条边才能围成封闭图形,然后考虑对于每一条边,最多能围成的面积。如果是偶数条边,那么就是使得两条边长度差最小得到的面积。如果是奇数条边,那么就是,首先少用一条,然后围成一个偶数条边的最大矩形,之后在这个矩形的较长边上增加一条边,可以突出一个梯形的部分,这就是对应的最大面积。
代码
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <cmath>
using namespace std;
int Area(int x)
{
if(x%4==0)return x/4*(x/4)*2;
else if(x%2==0) return x/4*(x/4+1)*2;
else return Area(x-1)+(x-2)/4;
}
int main()
{
int T;scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
for(int i=4;;i++){
if(Area(i)>=n){
printf("%d\n",i );
break;
}
}
}
return 0;
}