1 条题解

  • 0
    @ 2023-10-30 20:16:03

    这题其实不算构造题,自己感觉就是个暴力题,考察代码细节的问题。

    第二场 BB 算是一个简单的构造题。

    这题 输出分为两种 1-1 : 当 xx 的位置不能放 nn 时,后面不可能有满足题目要求的数组(xx 处只能放2x,3x,4x...kx2*x , 3*x , 4*x ... k*x)。

    另一种: xx 之前的时满足题目条件最小的词序,只能从 xx 后找到最小情况。

    #include<iostream>
    using namespace std;
    const int N=2e5+5;
    int a[N];
    ​
    int main()
    {
        int T;
        cin>>T;
        while(T--)
        {
            int m,n;
            cin>>m>>n;
            
            if(m%n) cout<<"-1\n";
            else
            {
                for(int i=1;i<=m;i++)
                    a[i]=i;
                a[n]=m,a[m]=1,a[1]=n;
                
                int t=n;
                for(int i=n+1;i<m;i++)
                {
                    if(a[i]%t==0&&a[t]%i==0)
                    {
                        swap(a[i],a[t]);
                        t=i;
                    }
                }
                
                for(int i=1;i<=m;i++)
                    cout<<a[i]<<' ';
                cout<<'\n';
            }
        }
        return 0;
    }
    

    信息

    ID
    909
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    174
    已通过
    15
    上传者