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

从‘最速控制’到代码:深入拆解韩京清ADRC中TD跟踪器的fhan函数(含Matlab/Simulink实例)

本文深入解析韩京清ADRC中的fhan函数,从理论到代码实现,详细拆解其在Matlab/Simulink中的应用。通过分析最速控制问题和非线性TD的连续形式,揭示fhan函数在信号处理和噪声抑制中的独特优势,并提供工程实践中的参数整定和优化技巧。

weixin_42659194的博客 247

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

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

tongjingqi_的博客 734

组态王通过以太网与西门子S7-200 SMART PLC通讯案例详解

通过以上步骤,我们成功实现了组态王与西门子S7-200 SMART PLC的以太网通讯。这一技术不仅提高了工业自动化系统的灵活性和可靠性,还为初学者提供了一个实用的学习案例。希望本文能帮助您快速掌握组态王与西门子S7-200 SMART PLC的通讯技术。如有任何疑问,欢迎留言讨论!

2401_88785500的博客 2004

基于IP2369与STM32的45W双向PD移动电源设计

USB PD(Power Delivery)是一种面向高功率、智能协商的通用快充协议,其核心在于通过BMC编码在CC线上完成供电能力(PDO)动态匹配与电压/电流精准调控。IP2369作为高度集成的PD协议管理芯片,内置PHY、协议引擎与MOSFET驱动,可卸载MCU实时通信压力;而STM32F103系列凭借低功耗STOP模式与丰富外设,成为电源状态管理与用户交互的理想协处理器。该组合显著提升系统鲁棒性与能效比,适用于便携式移动电源、嵌入式备用电源及PD协议教学验证等场景。本文围绕IP2369配置电阻精度、

weixin_42608299的博客 516

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

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

nagisa2019的博客 447

2024年上半年试题二:论性能测试方法及其应用

2025年1月,我以系统分析师的身份参与了公司OA系统的开发与建设。该系统包含的功能有打卡签到、公文流转、工资查询等。我们吸取了之前由于系统使用人数激增暴露出的短时间卡顿等问题,所以在本次开发中,我们非常重视系统的性能测试。通过自动化的测试工具模拟多种正常、峰值及异常负载条件对系统的各项性能指标进行测试。性能测试在软件的质量保证中起着重要的作用,它包括的测试内容丰富多样,常见的负载测试和压力测试都属于性能测试。

银帅 548

HDU-5976-Detachment

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

qq_44624316的博客 298

【RT-DETR有效改进】利用ASF-YOLO改进特征融合层(附代码 + 详细教程)

本文给大家带来的改进机制是ASF-YOLO(发布于2023.12月份的最新机制),其是特别设计用于细胞实例分割。这个模型通过结合空间和尺度特征,提高了在处理细胞图像时的准确性和速度。在实验中,ASF-YOLO在2018年数据科学竞赛数据集上取得了卓越的分割准确性和速度,达到了0.91的box mAP(平均精度),0.887的mask mAP,以及47.3FPS的推理速度,效果非常的好,这个结构本来是用于分割的,我将其移植到了目标检测的模型上,所以其可以适用于分割和目标检测。

Snu77的博客 2294

★教程3:Simulink学习教程入门60例目录

1.订阅本教程用户可以免费获得本博任意1个(包括所有免费专栏和付费专栏)博文对应代码;2.本Simulink课程的所有案例(部分理论知识点除外)均由博主编写而成,供有兴趣的朋友们自己订阅学习使用。未经本人允许,禁止任何形式的商业用途;3.本课程除了介绍常见的Simulink模块介绍之外,我们更侧重于各种实例的完整设计介绍。从通信,控制器,图像处理,语音处理,电力系统等诸多常用领域介绍了相关案例,如果对于某个较为复杂的案例,初学者无法正确复现,也可以私信博主获得完整Simulink模型文件。

FPGA/MATLAB学习教程/源码/项目合作开发 1万+

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

美的集团-数据挖掘工程师面试分享

美的集团-数据挖掘工程师面试分享

510

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

双馈风机并网系统宽频振荡机理与抑制方法研究

双馈风机并网系统宽频振荡分析与抑制 摘要:本文研究了双馈风机(DFIG)接入弱电网引发的宽频振荡问题。通过建立DFIG并网系统阻抗模型,分析了锁相环带宽、电流环带宽等参数对阻抗特性的影响。研究揭示了DFIG与电网阻抗交互导致交截频率处相位差超过180°的振荡机理。提出基于锁相环优化的阻抗重塑抑制策略,采用电压补偿和陷波器改善系统稳定性。仿真结果表明,该方法能有效降低相位差约10°-168°,显著抑制宽频振荡。代码实现了阻抗建模、稳定性分析和抑制策略验证,为工程应用提供了理论依据。

huanghm88的专栏 319

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

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

Cai_Haiq的博客 821

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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、付费专栏及课程。

余额充值