Codeforces 1497C2 LCM

題名

Portal Codeforces 1497C2 k-LCM(ハードバージョン)

回答

ソリューションのセットを直接構築することは簡単ではありません。以下のためのLCM LCML C Mの場合、1 11はそれに寄与せず、k − 3k-3を解きますk割り当てられた3つの番号111k '= 3に変換、n' = n −(k − 3)k '= 3、n' = n-(k-3)k=3 n=nk3 状況の問題。

k = 3の場合k = 3k=3nnの場合nが奇数の場合、一連の解(1、n / 2、n / 2)(1、n / 2、n / 2)があります。1 n / 2 n / 2 同様に、nnの場合nは偶数で、構成できます(2、n / 2 − 1、n / 2 − 1)(2、n / 2-1、n / 2-1)2 n / 21 n / 21 LCMLCMを保証するためL C Mは、であり、N / 2 - 1のN / 2-1n / 21n / 2 − 1 n / 2-1を確保する必要がありますn / 21存在因子2 22 ;n / 2 − 1 = 2 x + 1、x = 1、2、3、…n / 2-1 = 2x + 1、x = 1,2,3、\ cdotsと仮定n / 21=2 x+1 バツ=1 2 3 、次にn = 4 x + 4 n = 4x + 4n=4 x+4、ソリューションのセットを構築できます(n / 2、n / 4、n / 4)(n / 2、n / 4、n / 4)n / 2 n / 4 n / 4

#include <bits/stdc++.h>
using namespace std;
const int maxk = 100005;
int T, N, K, A[maxk];

int main()
{
    
    
    scanf("%d", &T);
    while (T--)
    {
    
    
        scanf("%d%d", &N, &K);
        for (int i = 4; i <= K; ++i)
            A[i] = 1;
        N -= K - 3;
        if (N & 1)
            A[1] = 1, A[2] = A[3] = N >> 1;
        else
        {
    
    
            if (!((N >> 1) & 1))
                A[1] = N >> 1, A[2] = A[3] = N >> 2;
            else
                A[1] = 2, A[2] = A[3] = (N >> 1) - 1;
        }
        for (int i = 1; i <= K; ++i)
            printf("%d%c", A[i], i == K ? '\n' : ' ');
    }
    return 0;
}

おすすめ

転載: blog.csdn.net/neweryyy/article/details/115149338
おすすめ