CodeForces 201A Clear Symmetry

 

Consider some square matrix A with side n consisting of zeros and ones. There are n rows numbered from 1 to n from top to bottom and n columns numbered from 1 to n from left to right in this matrix. We'll denote the element of the matrix which is located at the intersection of the i-row and the j-th column as Ai, j.

Let's call matrix A clear if no two cells containing ones have a common side.

Let's call matrix A symmetrical if it matches the matrices formed from it by a horizontal and/or a vertical reflection. Formally, for each pair (i, j(1 ≤ i, j ≤ n) both of the following conditions must be met: Ai, j = An - i + 1, j and Ai, j = Ai, n - j + 1.

Let's define the sharpness of matrix A as the number of ones in it.

Given integer x, your task is to find the smallest positive integer n such that there exists a clear symmetrical matrix A with side n and sharpness x.

Input

The only line contains a single integer x (1 ≤ x ≤ 100) — the required sharpness of the matrix.

Output

Print a single number — the sought value of n.

Sample test(s)
input
4
output
3
input
9
outpu 5
 
给出了一个矩阵的几个定义(形状,整洁性,均匀性)后,每次给出一个x,求满足形状为x,整洁性,均匀性的n*n的矩阵中,最小的n
 
YY一下,可以知道,n为偶数时一定不是最优解。
当n为奇数时:若x在[l,r]内时n最小都是a[x]行,则在范围[r+1,r+(a[x]+1)*2]内时,n最小都是a[x]+2.
特判1到5,则6~100递推一下就可以了。
 
 
 
 
 
 
 
CodeForces 201A Clear Symmetry
 1 #include<cstdio>

 2 

 3 const int MAXN=105;

 4 

 5 int a[MAXN];

 6 

 7 int main()

 8 {

 9     a[1]=1;

10     a[3]=5;

11     a[2]=a[4]=a[5]=3;

12     for(int i=5;i<MAXN;)

13     {

14         int x=(a[i]+1)*2;

15         for(int j=i+1;j<=i+x;j++)

16             a[j]=a[i]+2;

17         i+=x;

18     }

19 

20     int x;

21     while(scanf("%d",&x)!=EOF)

22     {

23         printf("%d\n",a[x]);

24     }

25 

26     return 0;

27 

28 }
View Code

 






Note
 

The figure below shows the matrices that correspond to the samples:

CodeForces 201A Clear Symmetry

你可能感兴趣的:(codeforces)