CF1550A Find The Array(贪心算法)

简介: CF1550A Find The Array(贪心算法)

Let's call an array a  consisting of nn positive (greater than 00) integers beautiful if the following condition is held for every ii from  1 to  n: either ai=1  or at least one of the numbers ai−1  and ai−2  exists in the array as well.


For example:


  • the array [5,3,1] is beautiful: for a1 , the number a1−2=3 exists in the array; for  a2, the number a2−2=1 exists in the array; for  a3, the condition a3=1 holds;
  • the array [1,2,2,2,2] is beautiful: for  a1, the condition a1=1  holds; for every other number  ai, the number ai−1=1  exists in the array;
  • the array [1,4]  is not beautiful: for a2 , neither a2−2=2  nor a2−1=3  exists in the array, and  a2≠1;
  • the array [2]  is not beautiful: for a1 , neither  a1−1=1 nor  a1−2=0 exists in the array, and a1≠1
  • the array [2,1,3] is beautiful: for a1 , the number a1−1=1  exists in the array; for  a2, the condition a2=1  holds; for  a3, the number a3−2=1  exists in the array.


You are given a positive integer ss. Find the minimum possible size of a beautiful array with the sum of elements equal to  s.


Input


The first line contains one integer t  (1≤t≤5000 ) — the number of test cases.


Then t lines follow, the i-th line contains one integer  s (1≤s≤5000 ) for the  i-th test case.


Output


Print tt integers, the  i-th integer should be the answer for the i -th testcase: the minimum possible size of a beautiful array with the sum of elements equal to ss.


Example


Input


4

1

8

7

42


Output


1

3

3

7


Note


Consider the example test:


  1. in the first test case, the array [1] meets all conditions;
  2. in the second test case, the array [3,4,1] meets all conditions;
  3. in the third test case, the array [1,2,4] meets all conditions;
  4. in the fourth test case, the array  [1,4,6,8,10,2,11] meets all conditions.


题目分析就是我们


一个数组 a 是好的当且仅当数组内每一个数  ai 满足:  ai=1 或   ai−1=aj 或  ai−2=aj 。


给出一个好数组的元素之和 x  ,求好数组的元素个数最小值。  


思路



本题用贪心做,每次放的数尽量大,即每个数比前一个数多 2  。如果最后一个数放不下,那么就把最后一个数减小到刚好放下,元素个数不变。


具体实现看代码

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
  int t;
  cin>>t;
  while(t--)
  {
    int n,sum1=0,sum2=0;
    cin>>n;
    for(int i=1;i<=500000;i+=2)
    {
      sum1+=i;
      sum2++;
    if(sum1>=n)
    {
      cout<<sum2<<endl;
      break;
    }
    }
  }
}
相关文章
Leetcode Find Minimum in Rotated Sorted Array 题解
对一个有序数组翻转, 就是随机取前K个数,移动到数组的后面,然后让你找出最小的那个数,注意,K有可能是0,也就是没有翻转。
48 0
|
搜索推荐 算法 PHP
PHP 数组(Array) - 排序算法
PHP 数组(Array) - 排序算法
46 0
|
JavaScript 前端开发 索引
Array类型【find】
Array类型【find】
96 0
|
Shell Linux 索引
Linux- 转换 find 命令的返回值为 shell array
本文示例了如何在Linux系统下转换 find 命令的返回值为一个 shell array
213 0
|
算法
LeetCode Find Minimum in Rotated Sorted Array II
假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。 注意数组中可能存在重复的元素。
84 0
LeetCode Find Minimum in Rotated Sorted Array II
LeetCode 153. Find Minimum in Rotated Sorted Array
假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。 你可以假设数组中不存在重复元素。
107 0
LeetCode 153. Find Minimum in Rotated Sorted Array
LeetCode contest 200 5476. 找出数组游戏的赢家 Find the Winner of an Array Game
LeetCode contest 200 5476. 找出数组游戏的赢家 Find the Winner of an Array Game
[LeetCode] Find the Derangement of An Array 找数组的错排
In combinatorial mathematics, a derangement is a permutation of the elements of a set, such that no element appears in its original position.
1287 0

热门文章

最新文章