1 条题解

  • 3
    @ 2023-1-2 20:10:05

    这道题考验找规律的能力。

    首先,让我们先观察一下这个数列:

    30,31,30+31,32,30+32,31+32,30+31+32,...3^0,3^1,3^0+3^1,3^2,3^0+3^2,3^1+3^2,3^0+3^1+3^2,...

    以下是我发现的规律:

    1. 当该填入kk的次幂时,以此值为分界线,下一个该填的就是kk的次幂++kk的次幂之前的值(按从小到大的顺序,这样可以保证当前填入的数值是有序的) 举例: 按上公式,当填入323^2时,之后的几项都是323^2+323^2之前出现过的每一个值:

      30+32,31+32,30+31+32,...\color{blue}{3^0}\color{a} + \color{red}{3^2}\color{a},\color{blue}{3^1}\color{a}+\color{red}{3^2}\color{a},\color{blue}{3^0+3^1}\color{a}+\color{red}{3^2}\color{a},...

    2. 而且,设当前应填入kak^a,那么再填入ka+1k^{a+1}之前,从kak^a开始(包括kak^a)总共应填入2a2^a个值(这只是偶然发现,没啥用处)


    因此根据规律1,我们能写出如下代码:

    while (i <= n)
    {
        p.push_back(pow(k , power));//填入k的次幂
        i++;
        power++;
        int ni = i;//一定要用临时变量存i!!!否则在随着i的增加j永远都小于i - 1!!!
        for (int j = 0 ; j < ni - 1 ; j++)
        {
            p.push_back(p[j] + p[ni - 1]);//依次加上之前的每一个元素
            i++;//不要忘!
        }
    }
    printf("%lld" , p[n - 1]);//由于vector下标从0开始,所以要输出p[n - 1]!
    

    ACAC CodeCode:

    #include <bits/stdc++.h>
    using namespace std;
    int k , n , power = 1;
    vector<long long> p;
    int main()
    {
        scanf("%d %d" , &k , &n);
        p.push_back(1);
        int i = 1;
        while (i <= n)
        {
            p.push_back(pow(k , power));
            i++;
            power++;
            int ni = i;
            for (int j = 0 ; j < ni - 1 ; j++)
            {
                p.push_back(p[j] + p[ni - 1]);
                i++;
            }
        }
        printf("%lld" , p[n - 1]);
        return 0;
    }
    
    • @ 2023-1-2 20:35:31

      PSPS:我会LaTeX\LaTeX公式啦!!!!!

    • @ 2023-1-16 20:15:36

      30+32,31+32,30+31+32,...\color{blue}{3^0}\color{a} + \color{red}{3^2}\color{a},\color{blue}{3^1}\color{a}+\color{red}{3^2}\color{a},\color{blue}{3^0+3^1}\color{a}+\color{red}{3^2}\color{a},...

      本行源LaTeX\mathfrak L \mathfrak a \mathfrak T \mathfrak e \mathfrak X代码:

      \color{blue}{3^0}\color{a} + \color{red}{3^2}\color{a},\color{blue}{3^1}\color{a}+\color{red}{3^2}\color{a},\color{blue}{3^0+3^1}\color{a}+\color{red}{3^2}\color{a},...
      
  • 1

信息

ID
1687
时间
1000ms
内存
256MiB
难度
3
标签
递交数
23
已通过
18
上传者