首先预处理,分解为n位数至少要多大,然后upper_bound大概就知道拆分为几个数了.
然后考虑最优解,就是每位数劲量的大,因为是相乘,所以中间做多有一个空,我们记录中间空的位置和其实位置以及最后的位置就知道了答案.
前面的数的阶乘以及逆元可以预处理,阶乘的逆元也可以预处理.复制度在O(logn)
#include<cstdio>
#include<iostream>
#include<algorithm>
#define ll long long
const int maxn = 5e4;
const int mod = 1e9+7;
using namespace std;
int sum2[maxn+10];
ll fac[maxn+10];
ll inv[maxn+10];
void init(){
sum2[0] = sum2[1] =

博客探讨了在HDU 5976问题中如何使用数论方法寻找简单逆元。首先预处理分解数字的最小位数,接着通过upper_bound确定最优解的拆分方式。关键在于尽量选择大的数字并记录空位位置,同时预处理阶乘和逆元信息,以实现O(logn)复杂度的解决方案。
最低0.47元/天 解锁文章
3211

被折叠的 条评论
为什么被折叠?



