1550A. Find The Array

https://codeforces.com/problemset/problem/1550/A

题意

给出一个x数字,用这个数字构造出一组特殊的正数序列,满足如下条件

  1. 数字之和为x
  2. 每一个数字都是漂亮数
  • 漂亮数 a i a_i ai定义: a i = 1 a_i=1 ai=1,或者存在 a j = a i − 1 a_j=a_i-1 aj=ai1 a j = a i − 2 a_j=a_i-2 aj=ai2

现在求用x构造出这种序列的最小长度

题解

最小的一个数字一定是1,如果要使得序列最长,当序列长度为3的时候,间隔拉满,数字x最大为9(9=1+3+5),如果超出这个最大间隔,必须再添加一位,使得序列长度为4。
根据等差数列求和公式,我们可以得出结论,序列长度为 r e s res res的时候, x x x最大值为 r e s 2 res^2 res2,如果x超出了 r e s 2 res^2 res2,那么x就得+1。因此答案就是 ceil(sqrt(x))

代码

#include<bits/stdc++.h>
using namespace std;
const int N=2005;
int main(){
    int t ;
    cin>>t;
    while(t--){
        int x;
        cin>>x;
        cout<<(int)(ceil(sqrt(x)))<<endl;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值