题意:将一个数x拆成a1+a2+a3+……,ai不等于aj,求最大的a1*a2*a3*……。

分析:

1、预处理前缀和前缀积,因为拆成1对乘积没有贡献,所以从2开始拆起。

2、找到一个id,使得2+3+4+……+id - 1(sum[id-1]) < x < 2+3+4+……+id(sum[id)。(二分找即可)

则rest = x - sum[id - 1]。将rest分配给2+3+4+id-1中的某个数。

3、在保证数字不重复的前提下,分配给的那个数越小越好,证明见4。

因此,应该分配给的数为id-rest。但是在id-rest小于2时,那还应该分配给2,2是可以分配的数字中最小的数字。

假设分配给4,那么最后的结果中,mul[id-1]应除以4(把4去掉),然后再乘上(4+rest)。

4、证明:设tmp=2*3*4*……*(id - 1)。

假设既可分配给4,也可分配给5的情况下,

将rest分配给4:设tmp=4*t1,则ans1=(4+rest)*t1,

将rest分配给5:设tmp=5*t2,则ans2=(5+rest)*t2,

因为t1>t2,所以ans1>ans2,得证。

5、PS:2为偶数,3为奇数,2x+3y可以表示大于1的所有正整数,3最多的时候最优。

6、逆元

1、除法取模要用逆元。

遇到(a/b)%mod这种情况,应转化成(a*k)%mod,k即为a在mod下的逆元。

2、递推求逆元

inv[1]=1
for(i=2;i<n;i++)
inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD

3、定义:

若a*b=1(mod MOD)则称作b是a在模MOD下的逆元。记作a^-1=b(mod m)

4、性质: a^-1=b(mod MOD)时
b^-1=a(mod MOD)
a*b=1(mod MOD),即a*b=MOD*x+1.
a^-1=b+k*MOD(mod MOD)
MOD/a=MOD*b(mod MOD)
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN = 100000 + 10;
typedef long long LL;
LL sum[MAXN], mul[MAXN], inv[MAXN];
const LL MOD = 1e9 + 7;
void init(){
sum[1] = 0, mul[1] = 1, inv[1] = 1;
for(int i = 2; i < MAXN; ++i){
sum[i] = sum[i - 1] + i;
mul[i] = ((mul[i - 1] % MOD) * (i % MOD)) % MOD;
inv[i] = (MOD - MOD / i) * inv[MOD % i] % MOD;
}
}
int main(){
int T;
scanf("%d", &T);
init();
while(T--){
LL x;
scanf("%lld", &x);
if(x == 1){
printf("1\n");
continue;
}
int id = lower_bound(sum + 2, sum + MAXN, x) - sum;
if(sum[id] == x){
printf("%lld\n", mul[id]);
continue;
}
--id;
LL rest = x - sum[id];
LL ans;
if(2 + rest > id){
ans = ((mul[id] * inv[2]) % MOD * (2 + rest)) % MOD;
}
else{
ans = ((mul[id] * inv[id + 1 - rest]) % MOD * (id + 1)) % MOD;
}
printf("%lld\n", ans % MOD);
}
return 0;
}

  

HDU - 5976 Detachment(逆元)的更多相关文章

  1. HDU 5976 Detachment(拆分)

    HDU 5976 Detachment(拆分) 00 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)   Problem D ...

  2. HDU 5976 Detachment 打表找规律

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5976 Detachment Time Limit: 4000/2000 MS (Java/Other ...

  3. HDU 5976 Detachment 【贪心】 (2016ACM/ICPC亚洲区大连站)

    Detachment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  4. hdu 5976 Detachment

    Detachment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  5. hdu 5976 Detachment 脑洞题 猜结论

    题目链接 题意 将\(x\)拆成\(a_1+a_2+...+\)的形式,且\(a_1\lt a_2\lt...\),使得\(a_1*a_2*...\)取到最大值 思路 大胆猜结论. 首先拆分的形式中肯 ...

  6. HDU 5976 数学,逆元

    1.HDU 5976 Detachment 2.题意:给一个正整数x,把x拆分成多个正整数的和,这些数不能有重复,要使这些数的积尽可能的大,输出积. 3.总结:首先我们要把数拆得尽可能小,这样积才会更 ...

  7. HDU 1576 (乘法逆元)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1576 题目大意:求(A/B)mod 9973.但是给出的A是mod形式n,n=A%9973. 解题思 ...

  8. HDU 5976 数学

    Detachment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  9. HDU 5651 组合+逆元

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5651 题目意思我看了半天没读懂,一直以为是回文子串又没看见substring的单词最后看博客才知道是用给 ...

随机推荐

  1. 布局文件中fill_parent和match_parent有什么区别?

    1)fill_parent设置一个构件的布局为fill_parent将强制性地使构件扩展,以填充布局单元内尽可能多的空间.这跟Windows控件的dockstyle属性大体一致.设置一个顶部布局或控件 ...

  2. 《Redis深度历险:核心原理和应用实践》千帆竞发——分布式锁

  3. 题解:luogu P3909

    这个题拖了快三个月了,只因缺个快速乘(气愤.jpg). 题目链接:P3909 异或之积 你确定没人用前缀和,后缀和吗? 蒟蒻想法与众不同! 我们实验\(A[]={1,2,3,4}\). 这里计不乘6时 ...

  4. 题解 LG P2264

    这是题解P2264 先讲一下Trie,其实Trie也名前缀树,就是说:如果Trie中某串是某串的前缀,那么我们可以共用这个串也就是这样: 插入h.hk.jc,jcfa 那么,h节点会给h和hk共用,j ...

  5. mycat 主从复制,读写分离,

    1.mycat 主从复制 https://blog.csdn.net/qq_35992900/article/details/80599976 2.mycat 读写分离 https://blog.cs ...

  6. JDBC--使用beanutils工具类操作JavaBean

    1.在JavaEE中,Java类的属性通过getter,setter来定义: 2.可使用BeanUtils工具包来操作Java类的属性: --Beanutils是由Apache公司开发,能够方便对Be ...

  7. 发送短信-----用restful 校验规则

    我们的需求如下 1. 获取手机号 . 手机格式校验 . 生成随机验证码 . 验证码发送到手机上 . 把验证码+手机号保留(30s过期) 复习 我们在有表的情况下的序列化 class MessageSe ...

  8. 用 ConfigMap 管理配置【转】

    Secret 可以为 Pod 提供密码.Token.私钥等敏感数据:对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap. ConfigMap 的创建和使用方式与 Secret 非常类 ...

  9. gojs 部分功能实现

    最近做的项目用到了gojs,使用了一段时间发现其功能特别强大,先记录下目前自己用到的把 1. 初始化画布 myDiagram = $(go.Diagram, "myDiagramDiv&qu ...

  10. 51nod 1765 谷歌的恐龙

    一开始看到了期望吓半死..然后弱弱的写了一下式子.设∑是出去m项之后的和,∑' 是m项的和. E=(n/m)*(∑'/m)+(n/m)*((n-m)/n)*(∑'/m+∑/(n-m))+(n/m)*( ...