Educational Codeforces Round 111 (Rated for Div. 2) A. Find The Array

49 篇文章 0 订阅
24 篇文章 0 订阅

题目大意

定义一个长度为 n n n数列 a 1 , a 2 , ⋯   , a n a_1,a_2,\cdots,a_n a1,a2,,an为合法的序列,对于 ∀ i ∈ { 1 , 2 , ⋯   , n } \forall i\in \{1,2,\cdots,n\} i{1,2,,n}其需要满足如下条件之一:

  • a i = 1 a_i=1 ai=1
  • ∃ j ∈ { 1 , 2 , ⋯   , n } \exists j\in \{1,2,\cdots,n\} j{1,2,,n}使得 a j = a i − 2 a_j=a_i -2 aj=ai2
  • ∃ j ∈ { 1 , 2 , ⋯   , n } \exists j\in \{1,2,\cdots,n\} j{1,2,,n}使得 a j = a i − 1 a_j=a_i -1 aj=ai1

现在给出 S S S需要任一输出长度最短的合法序列且满足 ∑ i = 1 n a i = S \displaystyle\sum_{i=1}^n a_i = S i=1nai=S

时间限制

1s

数据范围

s ≤ 5000 s\le 5000 s5000

题解

和一定,需要长度最短,那么最优的方案就是 a i a_i ai尽可能的大。
根据合法序列的定义,就可以知道 a i a_i ai最大的情况如下:
1 , 3 , 5 , 7 , ⋯ 1,3,5,7,\cdots 1,3,5,7,

那么答案就是 1 , 3 , 5 , ⋯   , ( 2 × k − 1 ) , S − ∑ i = 1 k ( 2 × i − 1 ) 1,3,5,\cdots,(2\times k - 1),S-\displaystyle\sum_{i=1}^k (2\times i - 1) 1,3,5,,(2×k1),Si=1k(2×i1)

Code

//#pragma GCC optimize (2)
//#pragma G++ optimize (2)
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#include <vector>
#include <queue>
#define G getchar
#define ll long long
using namespace std;

ll read()
{
    char ch;
    for(ch = G();(ch < '0' || ch > '9') && ch != '-';ch = G());
    ll n = 0 , w;
    if (ch == '-')
    {
        w = -1;
        ch = G();
    } else w = 1;
    for(;'0' <= ch && ch <= '9';ch = G())n = (n<<1)+(n<<3)+ch-48;
    return n * w;
}

const int N = 100005;

int n , m , pos , ans;

int main()
{
    //freopen("f.in","r",stdin);
    //freopen("f.out","w",stdout);

    for (int T = read() ; T ; T--)
    {
        n = read();
        pos = -1;
        ans = m = 0;
        for ( ; m < n ;)
        {
            pos = pos + 2;
            m = m + pos;
            ans ++;
        }
        printf("%d\n", ans);
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值