https://codeforces.com/problemset/problem/1550/A
题意
给出一个x数字,用这个数字构造出一组特殊的正数序列,满足如下条件
- 数字之和为x
- 每一个数字都是漂亮数
- 漂亮数 a i a_i ai定义: a i = 1 a_i=1 ai=1,或者存在 a j = a i − 1 a_j=a_i-1 aj=ai−1 或 a j = a i − 2 a_j=a_i-2 aj=ai−2
现在求用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;
}
}