HDU 5976 Detachment(数学+结论)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=5976
参考博客:https://blog.csdn.net/qq_34374664/article/details/53466435
题意:将一个数x拆成a1+a2+a3+……,ai不等于aj,求最大的a1a2a3*……
思路:这里面会用到一个结论,满足题意的要求的数字一定是若干段连续的数字,然后只需要预处理出前缀和(寻找最大的t,使得sum[t]<=x<sum[t+1]sum[t]<=x<sum[t+1]sum[t]<=x<sum[t+1])前缀积(计算结果).然后对于个别中间不存在的数字,除掉这个数字,也就是乘上这个数字的逆元就行了.
#include <bits/stdc++.h>
#define eps 1e-8
#define INF 0x3f3f3f3f
#define PI acos(-1)
#define lson l,mid,rt<<1
#define rson mid+1,r,(rt<<1)+1
#define CLR(x,y) memset((x),y,sizeof(x))
#define fuck(x) cerr << #x << "=" << x << endlusing namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int seed = 131;
const int maxn = 1e5 + 5;
const ll mod = 1e9 + 7;ll Pow(ll base, ll n) {ll res = 1;while (n) {if (n & 1) res = res * base % mod ;n >>= 1;base = base * base % mod;}return res;
}
ll sum[maxn], mul[maxn], MX;
void init() {//预处理sum[1] = 0;//sum数组是不计算1的前缀和,所以是从2开始的mul[1] = 1;for (int i = 2; i <= maxn; i++) {sum[i] = sum[i - 1] + i;mul[i] = mul[i - 1] * i;mul[i] %= mod;if (sum[i] >= 1e9) {MX = i;return;}}
}
int T;
ll x;
int main() {init();scanf("%d", &T);while (T--) {scanf("%lld", &x);if (x == 1) {//对1进行特判printf("1\n");continue;}int t = lower_bound(sum, sum + MX, x) - sum;if (sum[t] > x) t--;//t是最大的满足sum[t]<=x<sum[t+1]ll rest = x - sum[t];if (rest == t) {ll ans = mul[t + 2] * Pow(2, mod - 2) % mod * Pow(t + 1, mod - 2) % mod;printf("%lld\n", ans % mod);} else {ll ans = mul[t + 1] * Pow(t + 1 - rest, mod - 2) % mod;printf("%lld\n", ans % mod);}}return 0;
}
HDU 5976 Detachment(数学+结论)相关推荐
- HDU 5976 Detachment
这道题目是向这位博主学习的,链接贴出来:☆HDU 5976 Detachment 详细题解(贪心+逆元+前缀和,积),讲的很细致,很感谢: 思路: 1.题意是将数x分成若干个正整数和,使得这些整数的乘 ...
- HDU 5976 Detachment(拆分)
HDU 5976 Detachment(拆分) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...
- HDU - 5976 Detachment(贪心思维)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5976 题意:把一个数拆成若干个不相同的数之和,问这些数的乘积最大是多少. 思路:一般要使乘积最大,那么 ...
- HDU 5976 Detachment 题解(贪心+逆元+前缀和,积)
个人体会:无脑取模,最为致命!因为把存放前缀和的数组取了模,导致一些本来不等的元素变成了相同的元素,二分搜索出错...而且C++会T,G++就ac了.. http://acm.hdu.edu.cn/s ...
- HDU - 5976 Detachment(逆元)
题意:将一个数x拆成a1+a2+a3+--,ai不等于aj,求最大的a1*a2*a3*--. 分析: 1.预处理前缀和前缀积,因为拆成1对乘积没有贡献,所以从2开始拆起. 2.找到一个id,使得2+3 ...
- HDU 5976 Detachment 逆元
题意: 把一个数分解分解成若干个不相等的数,怎么分解使得这若干个数的积最大,输出这个积mod(1e+9) 分析: 考虑x=20的情况 如果不分解 那么 max ans===>20 如果分解成2个 ...
- 10大反直觉的数学结论
我是谁? 我在哪? 反直觉的事实有时候甚至骗过了最好的数学家.有些数学结论,往往会跟我们生活中的经验背道而驰. 今天,超模君就来跟大家讲讲10个反直觉的数学结论吧. 1 生日悖论 假设房间里有23人, ...
- 十大反直觉的数学结论
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|深度学习这件小事 反直觉的事实有时候甚至骗过了最好的数学 ...
- HDU Problem - 5976 Detachment(逆元,阶乘打表,数学)
题目链接 Problem Description In a highly developed alien society, the habitats are almost infinite dimen ...
最新文章
- python发送文件给微信好友_Python定时自动给微信好友发送天气预报
- TreeList右键菜单功能
- matlab 读写其他格式数据文件(excel)
- 如何成为一个出色的敏捷开发者?
- IP地址,子网掩码,默认网关,路由,形象生动阐述
- java多线程 异常处理_Java8多线程ForkJoinPool:处理异常
- [剑指offer]面试题第[53-1]题[JAVA][在排序数组中查找数字-1][二分法][暴力法]
- 这本零差评且有趣的Python算法书有点火~
- PL/SQL异常处理
- 集合 (二) ----- Map集合详解
- 从入门到入土:Nessus出击:使用nessus扫描某台靶机
- Dynamips 7200
- 面试中遇到的java笔试题
- JavaScript页面刷新的所有方法
- 风口来了第二期——电子科学与技术专业现状和前景介绍分享
- 基于JavaWeb的背单词系统的设计与实现
- OWASP十大漏洞之一
- HMS Core 5,面试必问知识点
- Lesson 15 Fifty pence worth of trouble
- Redis集群系列一 —— AKF拆分原则
热门文章
- 软件卸载不了怎么办?快用IObit Uninstaller Pro软件卸载大师
- 一牛网:PCB layout设计培训:免费试听,可预约报名
- sort在c语言中的作用,c语言中sort的用法详解.docx
- 解决maven打包时手动添加的依赖jar包打不进去的情况
- windows android 对比度,色彩对比度饱和度基本测试
- Graphql入门_0
- python离线安装第三方库whl_详细说明如何在pycharm不联网的情况下,离线安装第三方库及依赖包(如sklearn)...
- 记录一次 Liferay 7.X 中弹出窗口的简单使用
- 作为POLK的老粉,以亲身经验来说说普乐之声音响怎么样这个问题
- GE可能会出售其工业软件业务的股份