2017 CCPC 1005. CaoHaha's staff
题意:在笛卡尔坐标系下,画一个面积至少为 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 }