2016 ICPC大连赛区 hdu5976 Detachment

HDU 5976 Detachment 【贪心】 (2016ACM/ICPC亚洲区大连站) Detachment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 570    Accepted Submission(s): 192 Problem Description In a highly 阅读详情


Detachment

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 437    Accepted Submission(s): 144


Problem Description
In a highly developed alien society, the habitats are almost infinite dimensional space.
In the history of this planet,there is an old puzzle.
You have a line segment with x units’ length representing one dimension.The line segment can be split into a number of small line segments:  a1,a2 , … (x=  a1+a2 +…) assigned to different dimensions. And then, the multidimensional space has been established. Now there are two requirements for this space: 
1.Two different small line segments cannot be equal (  ai≠aj  when i≠j).
2.Make this multidimensional space size s as large as possible (s=  a1∗a2 *...).Note that it allows to keep one dimension.That's to say, the number of ai can be only one.
Now can you solve this question and find the maximum size of the space?(For the final number is too large,your answer will be modulo 10^9+7)
 

Input
The first line is an integer T,meaning the number of test cases.
Then T lines follow. Each line contains one integer x.
1≤T≤10^6, 1≤x≤10^9
 

Output
Maximum s you can get modulo 10^9+7. Note that we wants to be greatest product before modulo 10^9+7.
 

Sample Input
  
1 4
 

Sample Output
  
4
 

Source
 

Recommend
wange2014   |   We have carefully selected several similar problems for you:   5981  5977  5975  5973  5972 
题意:给你一个x,你可以任意分成n段,但每一段的长度不一样,求a1*a2...*an的最大值。

思路:从1开始枚举你会发现,拆得越小是越划算的(1除外,1*任何数为1),所以把x尽可能拆小就能得到最大值,因此我们维护前缀和和前缀积,二分找到前缀和大于等于x的位置,那么该前缀和只要去掉其中某个值就能得到x,套个逆元就可以了,但如果去掉的值刚好是1的话,那么我们选择去掉头和尾再加上pos+1就能得到x,一样用逆元就可以了。下面给代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
#include<queue>
#include<functional>
typedef long long LL;
using namespace std;
#define maxn 45000
#define ll l,mid,now<<1
#define rr mid+1,r,now<<1|1
#define lson l1,mid,l2,r2,now<<1
#define rson mid+1,r1,l2,r2,now<<1|1
#define pi 3.14159
const int mod = 1e9 + 7;
int sum[maxn];
LL mul[maxn];
LL quitemod(LL a, LL b){
	LL ans = 1;
	a = a%mod;
	while (b){
		if (b & 1)
			ans = (ans*a) % mod;
		b >>= 1;
		a = (a*a) % mod;
	}
	return ans;
}
int main(){
	sum[1] = 0;
	mul[1] = 1;
	for (int i = 2; i<45000; i++){
		sum[i] = sum[i - 1] + i;
		mul[i] = mul[i - 1]*i;
		mul[i] %= mod;
	}
	int t;
	scanf("%d", &t);
	while (t--){
		int x;
		scanf("%d", &x);
		if (x == 1){
			printf("1\n");
			continue;
		}
		int pos = lower_bound(sum, sum + 45000, x) - sum;
		LL now = sum[pos] - x;
		LL ans;
		if (now){
			if (now == 1){
				ans = mul[pos] * quitemod(pos, mod - 2) % mod*quitemod(2, mod - 2) % mod*(pos + 1) % mod;
			}
			else
				ans = mul[pos] * quitemod(now, mod - 2) % mod;
		}
		else
			ans = mul[pos];
		printf("%lld\n", ans);

	}
}


HDU - 5976  简单逆元 首先预处理,分解为n位数至少要多大,然后upper_bound大概就知道拆分为几个数了. 然后考虑最优解,就是每位数劲量的大,因为是相乘,所以中间做多有一个空,我们记录中间空的位置和其实位置以及最后的位置就知道了答案. 前面的数的阶乘以及逆元可以预处理,阶乘的逆元也可以预处理.复制度在O(logn)#include<cstdio> #include<iostream> #include<algo 阅读详情

相关推荐

别再只盯着FIFO深度了!Xilinx FIFO Generator的AXI Stream模式,这些TUSER、TLAST信号你用对了吗?

本文深入解析Xilinx FIFO Generator的AXI Stream模式中TUSER和TLAST信号的关键作用,提供视频流处理和网络数据包传输中的实战配置指南。通过详细代码示例和调试技巧,帮助工程师避免常见陷阱,优化系统性能与资源利用率。

weixin_30691871的博客 374

HDU 5976 [数学]

数学

m0_56366807的博客 311

单目视觉定位:深入解析PNP算法在机器人导航中的实战应用

本文深入解析了PNP算法在机器人单目视觉定位中的核心原理与实战应用。通过拆解坐标变换四步,详细阐述了如何从二维图像点反求相机三维位姿。文章结合OpenCV的solvePnP函数,提供了算法选择、参数调优及结果后处理的实用指南,并针对机器人导航中的特征匹配、尺度不确定性等挑战,给出了鲁棒性优化与实时性平衡的解决方案。

weixin_29083649的博客 419

HDU 5976 Detachment 题解(贪心+逆元+前缀和,积)

个人体会:无脑取模,最为致命!因为把存放前缀和的数组取了模,导致一些本来不等的元素变成了相同的元素,二分搜索出错。。。而且C++会T,G++就ac了。。 http://acm.hdu.edu.cn/showproblem.php?pid=5976 分解出的几个数越接近,乘积越大,如果可以相等,则分解成3的乘积,不能相等,只能分成阶乘则最大,不能分成阶乘时,把多出来的数从后往前均摊,因为如果从前往后均摊会造成存在相等的数,然后均摊完多数相乘复杂度太高,需要有除法,于是根据费马小定理把除法改成乘法逆元,需要预处

tongjingqi_的博客 734

Open5GS实战指南:Ubuntu 22.04环境下的5G核心网快速部署

本文提供Open5GS在Ubuntu 22.04环境下部署5G核心网的实战指南,涵盖环境准备、MongoDB配置、核心组件安装、WebUI部署及网络调优等关键步骤。通过详细的安装教程和常见问题解决方案,帮助开发者快速搭建开源5G核心网测试环境。

weixin_29202213的博客 538

如果使用ssms连接SQLserver的时候出现无法连接到服务器。

如果使用ssms连接SQLserver的时候出现无法连接到服务器。 Lan 2020-03-29 22:11 329 人阅读 0 条评论 标题: 连接到服务器------------------------------无法连接到...

Vastsa的博客 1万+

hdu-5976 Detachment 解题报告(乘法逆元、贪心?)

目录题目描述思路分析完整代码 题目描述 题目:https://vjudge.net/problem/HDU-5976 好像有翻译来着,我就不翻译了。 思路分析 这道题初看起来就让我们联想到高中数学的基本不等式:和一定,分解为相同的数时,他们的积最大,即:aa+bb>=2ab,当且仅当a==b时,ab最大。 但是这道题有个要求:互不相等,所以,我们取个较近的情况:他们是阶乘的情况最大,这时这道...

nagisa2019的博客 447

GD32 TIMER0 PWM输出死活没波形?别忘了这个关键配置(附完整代码)

本文详细解析了GD32 TIMER0 PWM输出无波形的常见问题,特别强调了高级定时器特有的主输出使能配置。通过完整的代码示例和调试技巧,帮助开发者快速解决PWM输出问题,适用于无刷电机控制等嵌入式应用场景。

weixin_30906185的博客 397

HDU-5976-Detachment

HDU-5976-Detachment 传送门 这道题是二分 + 乘法逆元~ 我今天在看基础数论的时候,发现好多种求逆元不同的方法,原先我只知道用费马小定理的方法,今天才感慨。。。(世界如此之大) 这道题二分我是手写的代码。。。emm 题目大意:给你一个数n,让你分解n,使得分解出来的数之和为n,并且尽可能使得这些分解出来得数乘积尽可能的大。 对于这种题目,有一个比较明显的结论:必然是取得一段连续...

qq_44624316的博客 298

#1机器学习(西瓜书)自学记录

《机器学习 》 Datawhale 组队学习, 吃瓜自学笔记。

qq_74168740的博客 1149

YOLOv13改进:原创自研 | 卷积魔改 | 一种新颖的风车形卷积(PConv)融合注意力机制,加强微弱小目标检测能力

风车形卷积(PConv)融合注意力机制进一步提升小目标检测能力

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1055

hdu5976 Detachment(逆元+二分优化+数学思维)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5976 题目大意: 给定一个数,让你分成互不相等的n个数(n为自然数),使这些数的乘积最大,输出最大乘积。 题目思路: 情况1:枚举l,并且剩余的数等于l,这时候应该得到的结果是3*4*5*6*7*....*l*l+2  情况2:枚举l,并且剩余的数小于l,这时候应该得到的值是2*3*4*

china震震的博客 422

基于Simulink与MATLAB的七轴OpenArm机械臂逆运动学仿真与轨迹规划完整指南

本文详细介绍了七自由度OpenArm机械臂在MATLAB/Simulink环境下的运动学仿真与轨迹规划实现方法。首先建立了机械臂的DH参数模型,验证了正运动学计算;随后提出了两种逆运动学求解算法(数值迭代法和臂型角参数化解析法)的MATLAB实现方案;最后在Simulink中搭建了完整的轨迹规划与控制系统。研究解决了七自由度冗余机械臂特有的多解性、奇异性和关节限位约束等核心问题,为OpenArm机械臂的运动控制提供了完整的技术方案和可运行代码实现。

AI的内部世界的博客 682

HDU 5976 Detachment——贪心

很容易想到最优策略是2*3*4一直乘到前缀和小于n的最靠后的位置,设这个位置为p 当segma(2,p)==n时明显答案就是mul(2,p) 但是当segma(2,p) != n时会有一个余项,设为need,need=n-segma(2,p),显然现在项数不会再增加了,我们只能把need按照一定的策略分配给前面的元素才能使结果更大,按照直觉我们应该将need平摊给前面所有的元素,但是要注意ne...

hao_zong_yin的博客 488

基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机

目录基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机项目实例1. 项目背景2. 系统架构2.1 电励磁同步电动机模型2.2 三相逆变器模型2.3 自适应控制器(Adaptive Controller)2.4 系统框图3. 模型设计3.1 创建Simulink模型3.2 自适应控制(Adaptive Control)设计3.3 仿真环境搭建4. 参数优化4.1 自动调优5. 实际应用案例5.1 工业驱动系统5.2 风力发电系统6. 结论进一步优化建议需求分析电励磁同步电动机

MHD0815的博客 266

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

HDU5976(找规律+费马小定理求逆元)

这个题我一开始以为只是个简单的DP,接着竟然交了个超时,我也很绝望,后来发现不能用DP的思路去做,因为不能出现重复出现的数字。 然后就觉得是找规律的题目。辉哥找出来的规律,然后我说了一下自己的想法就上课去了。今天补上这个题。 code:#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> usi

Cai_Haiq的博客 821

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

HDU 5976 逆元

1、HDU 5976Detachment   2、题意:给一个正整数x,把x拆分成多个正整数的和,这些数不能有重复,要使这些数的积尽可能的大,输出积。 3、总结:首先我们要把数拆得尽可能小,这样积才会更大(当然不能拆1)。所以容易想到是拆成2+3+...+n+s=x,先求出n即2+3+...+n<x<2+3+...+n+(n+1),然后将某个数向右平移s个单位变为n+1即可。注意...

weixin_30247781的博客 218

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

hdu 5976(数论、前缀和、前缀积、逆元)

/*     hdu 5976     题目大意是     给你一个数x     将它分解成任意个数之和的形式,但这些数不能相同     即x= a1+a2+……+an(ai!=aj)     然后将分解的数相乘使它最大输出这个数     即使s=a1*a2*……*an最大,输出s     解题思路     一个>=5的数分解成若干个数之和     我们要乘积最大  

a892573486的博客 437

HDU 5976 - Detachment (拆数乘法)

Detachment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1723    Accepted Submission(s): 481 Problem Description In a highly deve

Mr_Treeeee的博客 474

HDU 5976 Detachment(逆元+二分优化+数学分析)

题目大意 给定一个数,让你分成互不相等的n个数(n为自然数),使这些数的乘积最大,输出最大乘积。 题目分析 我也不知道数论的一些东西怎么证明,但是拿到一个数的时候分配,肯定是要分配到的数越小越好,但是不能分配出1,因为分配出1相乘之后得到的结果不会增加,因为想法就是枚举2,3,4,5……知道不能枚举即可。这个可以预处理一下,当然肯定还有未分配完的数,这时候要分情况讨论: 情况1:枚

你真的介意真的在乎真的想要真的渴望的话你一定能够做到 1385

HDU - 5976 Detachment(贪心思维)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5976 题意:把一个数拆成若干个不相同的数之和,问这些数的乘积最大是多少。 思路:一般要使乘积最大,那么先拆成两个不同数时,这两个数一定是接近n/2,然后每一个数又可以拆成两个数。但要这些数都不相同,所以最好的情况肯定是n等于从2开始一直到某个数k的连续和,如9=2+3+4,这样肯定是最优的,那么n...

LLL_yx的博客 704

Just an Old Puzzle(HDU-6620)

Problem Description You are given a 4 × 4 grid, which consists of 15 number cells and an empty cell. All numbers are unique and ranged from 1 to 15. In this board, the cells which are adjacent with ...

Alex_McAvoy的博客 316

HDU 5976 Detachment(数学+结论)

原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=5976 参考博客:https://blog.youkuaiyun.com/qq_34374664/article/details/53466435 题意:将一个数x拆成a1+a2+a3+……,ai不等于aj,求最大的a1a2a3*…… 思路:这里面会用到一个结论,满足题意的要求的数字一定是若干段连续的数字,然后只需...

yiqzq的博客 536

HDU - 5976 Detachment (逆元)

题意:给定x(x 思路:显然要使s最大,那么n要尽可能大,因为1对乘积没有影响,所以a1从2开始,找到最大的n使a1 + a2 + …… + an 然后就可以分情况讨论了,如果得到的序列是连续的,可以直接求。如果是两段,记下这两端的端点分别为k1, k2, k3, k4.先求第一段sum1 = k2! / k1! mod (1e9 + 7)。同理第二段sum2 = k4!/k3! mod

fly_tzf的博客 412

HDU 5976 逆元,前缀和,数论

一些总结: 1)一个数字若是分成任意数字求乘积和最大,则尽量全部分成3 2)分成两个则是n/2 3)拆成n个,拆成这个数/n 4)不能重复,则优先拆为2,3,4…,剩余▲x从后往前平分。 逆元应用:https://www.cnblogs.com/WHLdbk/p/6051706.html 求逆元: inv[1]=1;//1的逆元显然是1 for(i=2;i<n;i++) inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD #include<bits/stdc++.h> #d

葉子曦 286

HDU 5976 Detachment 【数论+贪心+逆元+前缀和、积】

传送门:HDU 5976 Detachment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description In a highly developed alien society, the habitats are almost infinit...

Waiting For You 530
上一篇: 2016 ICPC大连赛区 hdu5974 Convex
下一篇: 2016 ICPC青岛赛 hdu5984 C Pocky
overload1997
博客等级 码龄11年 328粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值