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... 阅读详情

相关推荐

农业AI避坑指南:用YOLO11做叶片病害检测时遇到的5个典型问题

本文分享了使用YOLO11模型进行农业叶片病害检测时常见的五个典型问题及解决方案。针对田间多变光照、病害样本不均衡、标注歧义、背景干扰和边缘部署等挑战,提供了包括场景自适应数据增强、解耦训练、软标签与鲁棒损失函数、困难负样本构建以及模型轻量化部署在内的实战经验,旨在帮助开发者提升农业AI项目的落地效果。

ujm56789012的博客 205

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

机器人强化学习入门学习笔记

如果你追求高精度动力学仿真、用于强化学习或机器人研究,MuJoCo 是一个非常优秀的选择。如果需要快速实验、使用真实机器人模型,PyBullet 或 Gazebo可能更合适;如果你追求大规模并行训练,Isaac Gym 或 BraX会更高效。legged gym底层是​编辑isaacgym,基于gpu训练可以多环境并行训练,收敛到一个稳定行走的策略快。本视频MuJoCo基于cpu训练很慢。

xiaomu_347的博客 1462

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

Voltus功耗分析——读入Innovus数据/cpf/spef文件

检查的内容:物理库、时序库、网表、I/Os、tie-high&tie-low pins、电源/地pins。设计数据(LEF/DEF/netlist)、cpf文件、SPEF文件。方法二:定义每个 power/ground net's 电压。4.设计数据检查(design sanity check)方法一:读入.dat数据。方法二:读入def文件。方法一:读入CPF文件。

qq_44347276的博客 3984

5分钟搞定PettingZoo多智能体环境搭建:从安装到运行第一个Demo

本文详细介绍了如何在5分钟内完成PettingZoo多智能体环境的搭建,从安装到运行第一个Demo。通过精准的版本控制和常见问题解决方案,帮助开发者快速上手多智能体强化学习(MARL)环境配置,并提供了实战案例和性能优化技巧。

backprop5master的博客 221

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

OpenClaw人人养虾:发现与传输

客户端需要先"发现"Gateway 的地址和端口,才能建立连接。OpenClaw 支持多种发现(Discovery)和传输(Transport)机制。

王国平的博客 572

hdu 2058 The sum problem (数学问题)

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

机器笨猫 1069

手把手教你如何在应用宝的Android模拟器安装第三方应用方法

通过上述步骤,你就能在腾讯应用宝模拟器中安装并运行本地的第三方APK应用了。虽然稍显繁琐,但操作起来并不复杂,只要按照步骤一步步做,就能顺利完成。希望这篇文章能帮助到遇到类似问题的你!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 7210

一文吃透!C#上位机CAN总线通信开发:从协议解析到数据可视化

CAN底层协议仅定义了8字节数据的传输规则,实际业务需自定义应用层协议,实现多类型数据的有序传输,这是数据解析的核心。仲裁ID(16进制)数据长度(DLC)数据场格式业务含义解析规则0x0014字节0~3:温度数据温度采集(单位:℃)4字节→float类型(大端/小端需统一,如西门子PLC格式)0x0022字节0~1:转速数据电机转速(单位:r/min)2字节→short类型(Int16)0x0031字节0:bit0~bit7设备状态(8路开关量)

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 845

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

【Unity实战篇 】| 游戏中实现镂空遮罩效果【矩形、圆形镂空遮罩】

本文来写一下怎样在Unity中完成一个 镂空遮罩 的效果。 镂空遮罩 比较常用的有两种:矩形镂空遮罩、圆形镂空遮罩。 镂空遮罩 在游戏中常被当做新手引导必备的内容,可以给玩家更多不一样的体验。 下面就一起来看一下怎样做出这种效果吧!

努力前行,总会成为自己心中的那道光 1万+

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

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

余额充值