HDU 2058 The sum problem——————数学

The sum problem——关于连续子数列的求和问题 The sum problem 阅读详情

The sum problem

Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 31416 Accepted Submission(s): 9409


Problem Description

Given a sequence 1,2,3,…N, your job is to calculate all the possible sub-sequences that the sum of the sub-sequence is M.


Input

Input contains multiple test cases. each case contains two integers N, M( 1 <= N, M <= 1000000000).input ends with N = M = 0.

Output

For each test case, print all the possible sub-sequence that its sum is M.The format is show in the sample below.print a blank line after each test case.


Sample Input

20 10
50 30
0 0

Sample Output

[1,4]
[10,10]

[4,8]
[6,9]
[9,11]
[30,30]


这道题的答案可以根据等差数列的性质得到:
最大的区间长度 :
由1+2+3+⋯+2m&gt;m\large \sqrt{1+2+3+\cdots+2m}&gt; m1+2+3+⋯+2m​>m
lmax=2×m\large l_{max} =\sqrt{2\times m}lmax​=2×m​

由等差数列
Sn=(a1+an)×n2\Large S_n = \frac{(a_1 + a_n)\times n}{2}Sn​=2(a1​+an​)×n​
Sn=(a1+a1+d∗(n−1))×n2\Large S_n = \frac{(a_1 + a_1+d*(n-1))\times n}{2}Sn​=2(a1​+a1​+d∗(n−1))×n​
Sn=(2∗a1+d∗(n−1))×n2\Large S_n = \frac{(2*a_1+d*(n-1))\times n}{2}Sn​=2(2∗a1​+d∗(n−1))×n​

又因为d=1,故:
Sn=(2∗a1+n−1)×n2\Large S_n = \frac{(2*a_1+n-1)\times n}{2}Sn​=2(2∗a1​+n−1)×n​
a1=Snn−n−12\Large a_1 = \frac{S_n}{n}-\frac{n-1}{2}a1​=nSn​​−2n−1​
那么
an=a1+n−1\Large a_n = a_1 + n-1an​=a1​+n−1

对于这一道题:m就相当于Sn,
假设&ThickSpace;m=(ai+aj)×(j−i+1)2\;\Large m = \frac{(a_i+a_j)\times (j-i+1)}{2}m=2(ai​+aj​)×(j−i+1)​
我们可以枚举aia_iai​
因为我们知道最大的区间长度为lmax=2×m\large l_{max} =\sqrt{2\times m}lmax​=2×m​
所以枚举1到l1到l1到l的所有值
那么根据上边的可以得到
a1=ml−l−12\Large a_1 = \frac{m}{l}-\frac{l-1}{2}a1​=lm​−2l−1​
an=a1+n−1\Large a_n = a_1 + n-1an​=a1​+n−1
只要(a1+a2)∗l2==m(a_1+a_2)*\frac{l}{2} == m(a1​+a2​)∗2l​==m
就好了

代码很短,就这几行:


#include<bits/stdc++.h>
using namespace std;
int main()
{
        int n,m;
        while(~scanf("%d %d",&n,&m)&&(n|m))
        {
                int l=sqrt(2*m);//最大区间长度为 L
                int a1,an;
                for(int k=l;k>0;--k)//区间长度为k
                {
                        a1 = m/k-(k-1)/2;
                        an = a1 + k-1;
                        if((a1 + an )*k/2 == m)
                                printf("[%d,%d]\n",a1,an);
                }
                printf("\n");
        }
        return 0;
}

【题解】- hdu The sum problem【技巧】 The sum problem Given a sequence 1,2,3,…N, your job is to calculate all the possible sub-sequences that the sum of the sub-sequence is M. Input Input contains multiple test cases. each case contains t... 阅读详情

相关推荐

MATLAB数据可视化:pcolor函数从入门到精通(附colormap调色秘籍)

本文深入解析MATLAB中pcolor函数的数据可视化应用,从核心机制、坐标网格指定到常见陷阱规避。重点揭秘colormap调色秘籍,涵盖内置色系选用原则、个性化定制方法及高级渲染技巧,助你创作出信息准确、视觉出色的专业图表,精通从数据到出版级图表的全流程。

kafka6courier的博客 246

HDOJ2058_The sum problem

Problem Description Given a sequence 1,2,3,......N, your job is to calculate all the possible sub-sequences that the sum of the sub-sequence is M.   Input Input contains multiple test cases. each

BarryLee的博客 410

【项目案例】前后端分离项目 【Web图书管理系统 】SpringBoot + Vue + Element UI + Mysql

Web图书管理系统

激流丶的博客 5397

The sum problem

The sum problem Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16197 Accepted Submission(s): 4843 Problem Description Given a sequence 1,

Briup-z.changhai 694

用limma包进行多组差异表达分析

写在前面:最近在使用limma包进行差异表达分析,参考了网上许多教程都觉得说的云里雾里,很不清楚。经过我自己一段时间非常痛苦的钻研,弄明白了,解决了我的实际需求。于是决定将我的分析经验写下来,分享给需要的人。 首先加载前期预处理好的表达矩阵。(我的原始表达矩阵文件已附在文后,大家有需要可以下载实践) setwd("E://Rworkplace") data<-read.table...

weixin_40640700的博客 4万+

ESD防护设计宝典(十一):CE(传导发射)超标问题排查与解决

(Conducted Emission, CE),亦称为传导骚扰,是电子电气设备或系统内部的电压、电流通过信号线、电源线或地线向外传输,对其他电子电气设备或系统造成电磁干扰的物理现象。其。

m0_56451176的博客 856

2020-11-08

The sum problem Problem Description Given a sequence 1,2,3,…N, your job is to calculate all the possible sub-sequences that the sum of the sub-sequence is M. 给出一个序列1,2,3…N,你的任务是计算出所有可能的和为M的子序列 Input Input contains multiple test cases. each case contai

CHEN_XU_LING的博客 305

Linux 服务器上部署 OpenClaw完整教程

2. 全局安装 OpenClaw 3. 初始化配置 配置模型提供商 方式一:使用配置命令(推荐) 方式二:直接编辑配置文件 在 部分添加: 配置多个模型提供商 如果你使用 Antigravity 本地代理,可以同时配置多个模型: 配置飞书集成 1. 创建飞书应用 访问 飞书开放平台 创建企业自建应用 记录 App ID 和 App Secret 2. 配置应用权限 在飞书开放平台,为应用添加以下权限:重要: 必须使用 长连接(WebSocket) 模式,不要使用 HTTP 回调!在飞书开放

Maynor的博客 5249

hdu 2058 The sum problem (数学问题)

题目意思: http://acm.hdu.edu.cn/showproblem.php?pid=2058 给出n和m,在小于n的数中,找出连续的序列,使其和为m,并从小到大输出。 题目分析: 第一次见这种题,就模拟,很显然超时了,后来在《短码之美》上看到了好的解决方法,和详细讲解,现在我只会用,不知道怎么说明白了,我也是醉了。。。 AC代码: /** *@xia

机器笨猫 1069

IgH EtherCAT 从入门到精通:第 30 章 实战:高可用 EtherCAT 系统设计

摘要:构建高可用EtherCAT系统的关键技术 本章详细介绍了工业级EtherCAT系统的高可用性设计方法,主要包括: 冗余链路架构:采用双网卡环形拓扑设计,主备网卡同时工作,通过IgH Master的冗余配置实现线缆故障自动切换。 状态监控机制:提供专用API实时监控主备链路状态,包括从站响应数、链路状态和冗余激活标志,形成完整的故障判断矩阵。 自动恢复功能:系统内置FSM架构支持热插拔自动检测和重配置,从站断线/重连时可自动完成状态恢复,同时允许应用层实施安全措施。 这些技术共同构成了生产环境下Ethe

从事嵌入式linux android驱动开发,拥有全栈能力 243

【Java 实战】通过Redis实现购物车功能

以上就是今天要讲的内容,本文仅仅简单介绍了如何通过Redis实现购物车功能,以上方法亲测有效,希望能给大家一个参考。

~~~~~~~BUG FLY~~~~~~~~~ 9969

HDU 2058 The sum problem [数学]

从今天开始 水题再不记! 凡是记得题,都是不水的。Description输入N M 在1..N中找到连续字串的和==M 每一个输出之后空一行Sample Input20 10 50 30 0 0Sample Output[1,4] [10,10][4,8] [6,9] [9,11] [30,30]Algorithm数学题 设要输出的 [x,x+y] 则有 (x + x+y)*

more time 384

【高级强化学习:算法、优化与泛化】第13章 扩散模型策略优化(Diffusion Policy Optimization)

\quad$ 计算均值 $\mu_t = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \tilde{\epsilon} \right)$.$\quad$ 组合得分估计: $\tilde{\epsilon} = \epsilon_{\text{unc}} + w \cdot (\epsilon_{\text{con}} - \epsilon_{\text{unc}})$.

u012133341的博客 337

HDU2058 The sum problem(数学问题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2058 分析: 让求一段连续的字串其和等于M。那么这段字串的形式必然是 a+1 a+2 .......a+d 这样的形式,由等差数列求和公式可得(a+1 + a+d) * d/ 2 = M,化简展开得 2ad + d + d^2 = 2M,可得 d*d < 2M,从这里知道d得范围。在前面的...

成龙大侠的博客 382

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

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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

HDU2058 The sum problem【数学计算+枚举】

The sum problem Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 26343    Accepted Submission(s): 7884 Problem Description Given a sequenc

海岛Blog 994

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

hdu 2058 The sum problem(数学题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2058 Time Limit: 5000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 18137Accepted Submission(s): 53...

weixin_30555515的博客 181

HDU 2058 The sum problem(数学)

The sum problem Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 28609 Accepted Submission(s): 8604 Problem Description Given a sequence

q435201823的博客 163

HDU 2058 The sum problem 数学题

解题报告:可以说是一个纯数学题,要用到二元一次和二元二次解方程,我们假设[a,b]这个区间的所有的数的和是N,由此,我们可以得到以下公式: (b-a+1)*(a+b) / 2 = N;很显然,这是一个二元一次方程,如果可以解出这个方程里的a,b就可以了,N是已知的,那么可以怎么一个公式怎么解二元方程呢?这里有两种方法可以选择,第一种是可以枚举a = 1,2,3.....,一直枚举到N/2,a是不...

weixin_30363509的博客 145

HDU 2058 The sum problem (数学)

the sum problem Time Limit: 5000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 32097Accepted Submission(s): 9580 ...

xcatf的博客 177

hdu 2058 The sum problem 数学题,想了好久,,

// 公式 m=(a+a+k-1)*k/2; k为长度 a为起始数字 //开始的时候,是想用 起点和终点来当变量的. 后来wa了. 认真想想,是因为这两个变量 就算用了二次函数的公式推导来优化. //也都会在数据为 n=10^9 m=1 或n=10^9 m=10^9 的时候需要遍历一次.显然超时的. //无奈看了讨论, 看到别人用区间长度来做 恍然大悟粗略估计下 k就不能超过sqrt(2m)这个量级, 看下数据的强弱 显然是可以过的.

万事屋 798

HDU 2058:The sum problem(数学)

The sum problem Time Limit: 5000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 31453Accepted Submission(s): 9414 Problem Description G...

weixin_34360651的博客 133

HDU-2058-The sum problem(数学题技巧型)

题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2058 思路: 这题的n,m都很大,很显然直接暴力,会超时,那就不能全部都找了,利用等差数列求和公式, (1)sn=n*(a1+an)/2; 即可代入公式,(2)m=(e-s+1)*(s+e)/2 注释*******//s代表起点,e代表终点。 ...

weixin_30340617的博客 130
上一篇: 51Nod 1092 回文字符串——————LCM
下一篇: NYOJ 12 喷水装置(二)——————贪心,区间覆盖
陶鸿杰
博客等级 码龄9年 93粉丝 298原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值