90分求助,最后一个WA
  • 板块P1249 最大乘积
  • 楼主Mrfs
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/5/12 20:37
  • 上次更新2023/10/23 15:59:48
查看原帖
90分求助,最后一个WA
331574
Mrfs楼主2023/5/12 20:37

总之就是非常难受...

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

/*
    贪心: 分割的数字越多  乘积越大
    高精度乘法
*/

// 高精度乘法模板
vector<int> mul(vector<int> &A, int b)
{
    vector<int> C;

    int t = 0;
    for (int i = 0; i < A.size() || t; i ++ )
    {
        if (i < A.size()) t += A[i] * b;
        C.push_back(t % 10);
        t /= 10;
    }

    while (C.size() > 1 && C.back() == 0) C.pop_back();

    return C;
}


int main()
{
    int n,s = 2;
    cin >> n;

    vector<int> C;
    int temp = 2;
    while(s < n)
    {
        C.push_back(temp);
        temp ++;
        s += temp;
    }
    C.push_back(temp);

    int y = s - n;
    auto p = find(C.begin(), C.end(), y);
    if(p == C.end())
    {
        for(int i=0; i<C.size();i++)
        {
            if(C[i] > y)
            {
                int b = C[i] - y;
                C[i] = 1;
                for(int j=C.size()-1;b;j--)
                {
                    if(C[j] != 1)
                    {
                        C[j] ++;
                        b --;
                    }
                }
                break;
            }
        }
    }else C.erase(p);
    // C.erase(remove(C.begin(),C.end(),1),C.end());
    auto pp = find(C.begin(),C.end(),1);
    if(pp != C.end()) C.erase(pp);

    for(auto p : C) cout << p << " ";
    cout << endl;

    vector<int> res;
    res.push_back(1);
    for(auto p : C) res = mul(res,p);

    for(int i=res.size()-1;i>=0;i--) cout << res[i];
    cout << endl;

    return 0;
}
2023/5/12 20:37
加载中...