1 条题解

  • 0
    @ 2025-10-8 17:03:27

    数学,贪心,高精

    用多3少2无1策略

    为什么呢???

    假设n为要划分的数

    先说无1 如果n=(n-1)+1 不如n=n

    因为1×(n-1)=n-1<n

    再说多3

    如果n=6

    多2 6=2+2+2 2×2×2=8

    多3 6=3+3 3×3=9

    9>8

    那为什么不用多4甚至多更大的数的策略呢?

    如果n=12

    多3 12=3+3+3+3 3×3×3×3=81

    多4 12=4+4+4 4×4×4=64

    多6 12=6+6 6×6=36

    多大于4的数,它们甚至比多2还差

    多2 12=2+2+2+2+2+2 2×2×2×2×2×2=64

    64>36

    先分成尽量多的3

    如果余数0 刚刚好直接乘就行了

    如果余数1 少一个3,多两个2(3×1<2×2)

    如果余数2 就用2乘

    不存在余数>=3的情况(余数小于除数3)

    
    #include <bits/stdc++.h>
    using namespace std;
    const int N=5005;
    int a[N], len;
    void mul(int *a, int &len, int x)
    {
        for(int i=1; i<=len; i++) a[i] *= x;
        for(int i=1; i<=len; i++) {
            a[i+1] += a[i]/10;
            a[i] %= 10;
        }
        if(a[len+1] > 0) len++;
    }
    int main()
    {
        int n; scanf("%d", &n);
        a[len=1] = 1;
        for(; n>4; n -= 3) mul(a, len, 3);
        mul(a, len, n);
        cout << len << '\n';
        for(int i=len; i >= len-99 && i >=1; i--) printf("%d", a[i]);
        return 0;
    }
    
    • 1

    信息

    ID
    2916
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    121
    已通过
    52
    上传者