CF1914B Preparing for the Contest 题解

· · 题解

原题传送门

题目大意:

输入 t 组数据,每行包括序列长度 n 与后一个数比前一个数大的次数 k,要我们构造一个后一个数比前一个数大的次数为 k 的序列并输出。

解题思路:

我们可以试着举一个较简单的例子,如当 n=6,k=2 时,可以有 4 5 6 3 2 1 。这个序列满足上面的条件,还可以进行归纳:

但是,k=0 时此归纳就不满足了,所以在写的时候要特判。

顺着归纳的式子,便可以轻松码出来啦!

代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n,k,t;
    cin>>t;
    for(int i=1;i<=t;i++)
    {
        cin>>n>>k;
        if(k==n-1)
        {
            for(int j=1;j<=n;j++)
                cout<<j<<" ";
            cout<<endl;
        }
        else if(k==0)//特判
        {
            for(int j=n;j>=1;j--)
                cout<<j<<" ";
            cout<<endl;
        }
        else
        {
            for(int j=n-k;j<=n;j++)//递增
            {
                cout<<j<<" ";
            }
            for(int j=n-k-1;j>=1;j--)//递减
            {
                cout<<j<<" ";
            }
            cout<<endl;
        }
    }

    return 0;//好习惯
}