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;
    }
    }
  }
}
相关文章
|
9月前
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Leetcode Find Minimum in Rotated Sorted Array 题解
对一个有序数组翻转, 就是随机取前K个数,移动到数组的后面,然后让你找出最小的那个数,注意,K有可能是0,也就是没有翻转。
134 0
|
搜索推荐 算法 PHP
PHP 数组(Array) - 排序算法
PHP 数组(Array) - 排序算法
221 0
|
JavaScript 前端开发 索引
Array类型【find】
Array类型【find】
201 0
|
Shell Linux 索引
Linux- 转换 find 命令的返回值为 shell array
本文示例了如何在Linux系统下转换 find 命令的返回值为一个 shell array
445 0
|
算法
LeetCode Find Minimum in Rotated Sorted Array II
假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。 注意数组中可能存在重复的元素。
148 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] )。 请找出其中最小的元素。 你可以假设数组中不存在重复元素。
159 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