2017 CCPC 1005. CaoHaha's staff

时间:2022-12-08 21:11:11

题意:在笛卡尔坐标系下,画一个面积至少为 nn 的简单多边形,每次只能画一条边或者一个格子的对角线,问至少要画几条。

题解:如果一个斜着的矩形长宽分别是 a, ba,b,那么它的面积是 2ab2ab。最优解肯定是离 \sqrt{\frac{n}{2}}2n​​​​ 很近的位置。想想 n=5n=5 时答案为什么是 77 然后在那个小范围内枚举一下就好了。

 当时做法为打表 通过边数确定最大面积 然后搜索 边数为4i的最大面积就是斜正方形 4i+1的可以多i-1个  4i+2的为i*(i+1)*2  4i+3的为a[4i+2]+i

AC代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int a[100000];
 4 int t,n;
 5 int main()
 6 {
 7     for(int i=1;i<=25000;i++)
 8     {
 9         int x=i;
10         int y=x*x*2;
11         a[i*4]=y;
12         a[i*4+1]=a[i*4]+x-1;
13         a[i*4+2]=x*(x+1)*2;
14         a[i*4+3]=a[i*4+2]+x;
15     }
16     cin>>t;
17     while(t--)
18     {
19         cin>>n;
20         for(int i=4;i<=100000;i++)
21         {
22             if(a[i]>=n)
23             {
24                 cout<<i<<endl;
25                 break;
26             }
27         }
28     }
29     return 0;
30 }